#asp.net-core #jwt #token #azure-ad-b2c #azure-ad-b2c-custom-policy
#asp.net-ядро #jwt #токен #azure-ad-b2c #azure-ad-b2c-custom-policy
Вопрос:
У меня есть 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>
Кроме того, я также добавил его в B2C_1A_TrustFrameworkExtensions
политику в разделе «Локальный вход в учетную запись» ClaimsProvider:
<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
в систему утверждение становится доступным:
Но если я перезапущу веб-приложение, и подписанный пользователь должен повторно получить токен (например, при вызове метода with 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>