AD B2C - 重新获取令牌后缺少自定义声明
AD B2C - Missing custom claims after re-acquiring token
我有一个 ASP.NET Core 3.1 项目使用 Azure AD B2C 来管理身份验证。我添加了一个名为 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
,所以我不明白为什么令牌不完整。
如果我可以为您提供更多信息以帮助您理解问题,请告诉我。提前致谢:)
好的,我找到原因了:我忘记将相关输出声明放入 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>
我有一个 ASP.NET Core 3.1 项目使用 Azure AD B2C 来管理身份验证。我添加了一个名为 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
,所以我不明白为什么令牌不完整。
如果我可以为您提供更多信息以帮助您理解问题,请告诉我。提前致谢:)
好的,我找到原因了:我忘记将相关输出声明放入 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>