AD B2C — отсутствуют пользовательские утверждения после повторного получения токена

#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>