AD B2C - 重新获取令牌后缺少自定义声明
Posted
技术标签:
【中文标题】AD B2C - 重新获取令牌后缺少自定义声明【英文标题】:AD B2C - Missing custom claims after re-acquiring token 【发布时间】:2021-04-27 10:56:31 【问题描述】:我有一个使用 Azure AD B2C 管理身份验证的 ASP.NET Core 3.1 项目。我添加了一个名为 extension_userType
的自定义声明(即扩展属性)。
为此,我将其添加到我的 B2C_1A_signup_signin
自定义策略中作为输出声明:
<DefaultUserJourney ReferenceId="SignUpOrSignIn" />
<TechnicalProfile Id="PolicyProfile">
<DisplayName>PolicyProfile</DisplayName>
<Protocol Name="OpenIdConnect" />
<InputClaims>
<InputClaim ClaimTypeReferenceId="passwordPolicies" DefaultValue="DisablePasswordExpiration, DisableStrongPassword" />
</InputClaims>
<OutputClaims>
<OutputClaim ClaimTypeReferenceId="displayName" />
<OutputClaim ClaimTypeReferenceId="givenName" />
<OutputClaim ClaimTypeReferenceId="surname" />
<OutputClaim ClaimTypeReferenceId="email" />
<OutputClaim ClaimTypeReferenceId="signInNames.emailAddress" PartnerClaimType="email" />
<OutputClaim ClaimTypeReferenceId="objectId" PartnerClaimType="sub" />
<OutputClaim ClaimTypeReferenceId="identityProvider" />
<OutputClaim ClaimTypeReferenceId="tenantId" AlwaysUseDefaultValue="true" DefaultValue="Policy:TenantObjectId" />
<OutputClaim ClaimTypeReferenceId="extension_userType" />
</OutputClaims>
<SubjectNamingInfo ClaimType="sub" />
</TechnicalProfile>
此外,我还将它添加到“本地帐户登录”ClaimsProvider 下的B2C_1A_TrustFrameworkExtensions
策略中:
<DisplayName>Local Account Sign In</DisplayName>
<TechnicalProfiles>
<TechnicalProfile Id="login-NonInteractive">
<Metadata>
<Item Key="client_id">OMISSIS</Item>
<Item Key="IdTokenAudience">OMISSIS</Item>
</Metadata>
<InputClaims>
<InputClaim ClaimTypeReferenceId="client_id" DefaultValue="OMISSIS" />
<InputClaim ClaimTypeReferenceId="resource_id" PartnerClaimType="resource" DefaultValue="OMISSIS" />
</InputClaims>
<OutputClaims>
<OutputClaim ClaimTypeReferenceId="extension_userType" />
</OutputClaims>
</TechnicalProfile>
<TechnicalProfile Id="SelfAsserted-LocalAccountSignin-Email">
<OutputClaims>
<OutputClaim ClaimTypeReferenceId="extension_userType" />
</OutputClaims>
用户登录后,extension_userType
声明可用:
但如果我重新启动网络应用程序,并且签名用户必须重新获取令牌(例如,当使用 AuthorizeForScopesAttribute
调用方法时),新令牌将不包含 extension_userType
声明。
相反,如果用户执行注销>登录,则声明将重新出现。
我分析了重新获取令牌时执行的快速重定向到AD B2C:它正确指向B2C_1A_signup_signin
,所以我不明白为什么令牌不完整。
如果我可以为您提供更多信息以帮助您了解问题,请告诉我。在此先感谢:)
【问题讨论】:
【参考方案1】:好的,我找到了原因:我忘记将相关的输出声明放到 AAD-UserReadUsingEmailAddress
和 AAD-UserReadUsingObjectId
技术配置文件中:
<TechnicalProfile Id="AAD-UserReadUsingEmailAddress">
<OutputClaims>
<OutputClaim ClaimTypeReferenceId="extension_userType" />
</OutputClaims>
</TechnicalProfile>
<TechnicalProfile Id="AAD-UserReadUsingObjectId">
<OutputClaims>
<OutputClaim ClaimTypeReferenceId="extension_userType" />
</OutputClaims>
</TechnicalProfile>
【讨论】:
以上是关于AD B2C - 重新获取令牌后缺少自定义声明的主要内容,如果未能解决你的问题,请参考以下文章
AD B2C 自定义策略自定义声明出现错误“无法验证提供的信息”。注册时