基于自定义属性值限制Azure B2C登录访问
Azure B2C联合登录场景下基于自定义租户属性的访问限制解决方案
核心思路
联合登录完成后,先从Azure AD B2C目录读取用户的extension_tenant自定义属性,再执行租户合法性断言验证,无需使用自断言技术配置文件(自断言步骤因无用户输入字段会被引擎跳过)。
具体实现步骤
1. 在编排流程中添加用户属性读取步骤
在联合登录完成后的编排阶段,添加读取用户目录属性的步骤,确保extension_tenant被加载到声明中。示例如下:
<!-- 联合登录成功后,读取用户属性(替换Order为你流程中合适的位置) --> <OrchestrationStep Order="6" Type="ClaimsExchange"> <ClaimsExchanges> <ClaimsExchange Id="AADUserRead" TechnicalProfileReferenceId="AAD-UserReadUsingAlternativeSecurityId" /> </ClaimsExchanges> </OrchestrationStep>
2. 确保用户属性读取技术配置文件返回extension_tenant
修改AAD-UserReadUsingAlternativeSecurityId技术配置文件,添加extension_tenant输出声明:
<TechnicalProfile Id="AAD-UserReadUsingAlternativeSecurityId"> <OutputClaims> <OutputClaim ClaimTypeReferenceId="objectId" /> <OutputClaim ClaimTypeReferenceId="displayName" /> <!-- 添加自定义租户属性输出 --> <OutputClaim ClaimTypeReferenceId="extension_tenant" /> </OutputClaims> </TechnicalProfile>
3. 添加租户验证断言步骤
在读取用户属性后,直接调用你的ClaimsTransformation-AssertAppTenantValidated技术配置文件执行验证:
<!-- 执行租户访问权限验证 --> <OrchestrationStep Order="7" Type="ClaimsExchange"> <ClaimsExchanges> <ClaimsExchange Id="AssertTenantAccess" TechnicalProfileReferenceId="ClaimsTransformation-AssertAppTenantValidated" /> </ClaimsExchanges> </OrchestrationStep>
4. 配置自定义错误提示
通过本地化配置自定义无权限错误消息,让用户在登录页或错误页看到明确提示:
<Localization Enabled="true"> <SupportedLanguages DefaultLanguage="zh-CN" MergeBehavior="ReplaceAll"> <SupportedLanguage>zh-CN</SupportedLanguage> </SupportedLanguages> <LocalizedResources Id="api.error.zh-CN"> <LocalizedStrings> <LocalizedString ElementType="ErrorMessage" StringId="UserMessageIfClaimsTransformationBooleanValueIsNotEqual">你没有访问该租户的权限,请联系管理员。</LocalizedString> </LocalizedStrings> </LocalizedResources> </Localization>
关键说明
你之前使用的自断言技术配置文件未执行,是因为SelfAssertedAttributeProvider需要包含用户需手动输入的声明字段,而你的配置中仅传入objectId(无需用户输入),引擎判定IsSelfAssertedEmpty为True,直接跳过了该步骤。改用直接调用声明转换技术配置文件的方式,即可正常执行租户验证逻辑。
内容的提问来源于stack exchange,提问作者Marin Bënzari
相关产品推荐
相关产品推荐

