Поделиться через


Настройка xID с Azure Active Directory B2C для проверки подлинности без пароля

В этом руководстве описано, как интегрировать проверку подлинности Azure Active Directory B2C (Azure AD B2C) с решением для цифровых идентификаторов xID. Приложение xID предоставляет пользователям защищенную, многофакторную проверку подлинности без пароля. Карточка "Мой номер", карта цифрового идентификатора, выданная правительством Японии, проверяет удостоверения пользователей, прошедшие проверку xID. Для своих пользователей организации могут получать проверенные персональные идентификационные данные (содержимое клиента) через API xID. Кроме того, приложение xID создает закрытый ключ в защищенной области на мобильных устройствах пользователей, что делает их устройствами цифровой подписи.

Предварительные требования

Описание сценария

На следующей схеме показана архитектура.

Схема архитектуры xID.

  1. На странице входа Azure AD B2C пользователь входит в систему или регистрируется.
  2. Azure AD B2C перенаправляет пользователя в xID с помощью запроса OpenID Connect (OIDC) для авторизации конечной точки API. Конечная точка OIDC содержит сведения о конечной точке. Поставщик удостоверений xID (IdP) перенаправляет пользователя на страницу входа авторизации xID. Пользователь вводит адрес электронной почты.
  3. Поставщик удостоверений xID отправляет push-уведомление на мобильное устройство пользователя.
  4. Пользователь открывает приложение xID, проверяет запрос, вводит ПИН-код или использует биометрические данные. Приложение xID активирует закрытый ключ и создает электронную подпись.
  5. Приложение xID отправляет подпись Поставщику удостоверений xID на проверку.
  6. Появится экран согласия для предоставления личных сведений службе.
  7. Поставщик удостоверений xID возвращает код авторизации OAuth для Azure AD B2C.
  8. Используя код авторизации, Azure AD B2C отправляет запрос на токен.
  9. Поставщик удостоверений xID проверяет запрос маркера. Если это допустимо, возвращается маркер доступа OAuth и маркер идентификатора с идентификатором пользователя и адресом электронной почты.
  10. Если требуется содержимое пользователя, Azure AD B2C вызывает API данных пользователя xID.
  11. API пользовательских данных xID возвращает зашифрованное содержимое клиента. Пользователи расшифровываются с помощью закрытого ключа, созданного при запросе сведений о клиенте xID.
  12. Пользователю предоставляется или запрещается доступ к клиентскому приложению.

Установка xID

  1. Чтобы запросить документы API, заполните форму запроса. Перейдите к разделу Связаться с нами.
  2. В сообщении укажите, что вы используете Azure AD B2C.
  3. С вами связывается торговый представитель xID.
  4. Следуйте инструкциям в документе api xID.
  5. Запрос клиента API xID.
  6. Техническая команда xID отправляет вам сведения о клиенте в течение 3–4 рабочих дней.
  7. Укажите URI перенаправления на сайте, используя следующий шаблон. Пользователи возвращаются к нему после проверки подлинности.

https://<your-b2c-domain>.b2clogin.com/<your-b2c-domain>.onmicrosoft.com/oauth2/authresp

Регистрация веб-приложения в Azure AD B2C

Зарегистрируйте приложения в управляемом клиенте, после чего они смогут взаимодействовать с Azure AD B2C.

Дополнительные сведения: Типы приложений, которые можно использовать в Active Directory B2C

Для тестирования необходимо зарегистрировать https://jwt.msвеб-приложение Майкрософт с декодированные содержимое маркера, которое не покидает браузер.

Регистрация веб-приложения и включение неявного предоставления маркера идентификатора

Полное руководство. Регистрация веб-приложения в Azure AD B2C

Создание ключа политики xID

Сохраните секрет клиента из xID в клиенте Azure AD B2C. Для выполнения следующих инструкций используйте каталог с клиентом Azure AD B2C.

  1. Войдите на портал Azure.
  2. На панели инструментов портала выберите Каталоги и подписки.
  3. Параметры портала | На странице Каталоги и подписки в списке Имя каталога найдите каталог Azure AD B2C.
  4. Выберите Переключиться.
  5. В левом верхнем углу портал Azure выберите Все службы.
  6. Найдите и выберите Azure AD B2C.
  7. В разделе Обзор выберите Identity Experience Framework.
  8. Выберите Ключи политики.
  9. Выберите Добавить.
  10. В пункте Параметры выберите Manual (Вручную).
  11. Введите имя ключа политики. Префикс B2C_1A_ добавляется к имени ключа.
  12. В поле Секрет введите секрет клиента от xID.
  13. Для параметра Использование ключа выберите Подпись.
  14. Нажмите кнопку создания.

Примечание

В Azure AD B2C пользовательские политики предназначены для сложных сценариев.

См . общие сведения о потоках пользователей и пользовательских политиках.

Настройка xID в качестве поставщика удостоверений

Чтобы пользователи входить с помощью xID, сделайте xID поставщиком утверждений, с которым Azure AD B2C взаимодействует через конечную точку. Конечная точка предоставляет утверждения, Azure AD B2C использует для проверки пользователей, прошедших проверку подлинности с помощью цифровых удостоверений на своем устройстве.

Добавление xID в качестве поставщика утверждений

Получите начальные пакеты настраиваемой политики из GitHub, а затем обновите XML-файлы в начальном пакете SocialAccounts, указав имя клиента Azure AD B2C.

  1. Скачайте ZIP-файл active-directory-b2c-policy-starterpack-main или клонируйте репозиторий. См . Azure-Samples/active-directory-b2c-custom-policy-starterpack.

  2. В файлах в каталоге SocialAccounts замените строку yourtenant именем клиента Azure AD B2C. Например, yourtenant.onmicrosoft.com преобразуется в contoso.onmicrosoft.com.

  3. Откройте SocialAccounts/TrustFrameworkExtensions.xml.

  4. Найдите элемент ClaimsProviders. Если его нет, добавьте его в корневой элемент.

  5. Добавьте новый ClaimsProvider , как показано в следующем примере:

    
     <ClaimsProvider>
       <Domain>X-ID</Domain>
       <DisplayName>X-ID</DisplayName>
       <TechnicalProfiles>
         <TechnicalProfile Id="X-ID-OIDC">
           <DisplayName>X-ID</DisplayName>
           <Description>Login with your X-ID account</Description>
           <Protocol Name="OpenIdConnect" />
           <Metadata>
             <Item Key="METADATA">https://oidc-uat.x-id.io/.well-known/openid-configuration</Item>
             <!-- Update the Client ID below to the X-ID Application ID -->
             <Item Key="client_id">00000000-0000-0000-0000-000000000000</Item>
             <Item Key="response_types">code</Item>
             <Item Key="scope">openid verification</Item>
             <Item Key="response_mode">query</Item>
             <Item Key="HttpBinding">POST</Item>
             <Item Key="UsePolicyInRedirectUri">false</Item>
             <Item Key="DiscoverMetadataByTokenIssuer">true</Item>
             <Item Key="token_endpoint_auth_method">client_secret_basic</Item>
             <Item Key="ClaimsEndpoint">https://oidc-uat.x-id.io/userinfo</Item>
             <Item Key="ValidTokenIssuerPrefixes">https://oidc-uat.x-id.io/</Item>
           </Metadata>
           <CryptographicKeys>
             <Key Id="client_secret" StorageReferenceId="B2C_1A_XIDSecAppSecret" />
           </CryptographicKeys>
           <OutputClaims>
             <OutputClaim ClaimTypeReferenceId="issuerUserId" PartnerClaimType="sub" />
             <OutputClaim ClaimTypeReferenceId="tenantId" PartnerClaimType="tid" />
             <OutputClaim ClaimTypeReferenceId="email" />
             <OutputClaim ClaimTypeReferenceId="sid" />
             <OutputClaim ClaimTypeReferenceId="userdataid" />
             <OutputClaim ClaimTypeReferenceId="XID_verified" />
             <OutputClaim ClaimTypeReferenceId="email_verified" />
             <OutputClaim ClaimTypeReferenceId="authenticationSource" DefaultValue="socialIdpAuthentication" AlwaysUseDefaultValue="true" />
             <OutputClaim ClaimTypeReferenceId="identityProvider" PartnerClaimType="iss" DefaultValue="https://oidc-uat.x-id.io/" />
             <OutputClaim ClaimTypeReferenceId="identityProviderAccessToken" PartnerClaimType="{oauth2:access_token}" />
           </OutputClaims>
           <OutputClaimsTransformations>
             <OutputClaimsTransformation ReferenceId="CreateRandomUPNUserName" />
             <OutputClaimsTransformation ReferenceId="CreateUserPrincipalName" />
             <OutputClaimsTransformation ReferenceId="CreateAlternativeSecurityId" />
             <OutputClaimsTransformation ReferenceId="CreateSubjectClaimFromAlternativeSecurityId" />
           </OutputClaimsTransformations>
           <UseTechnicalProfileForSessionManagement ReferenceId="SM-SocialLogin" />
         </TechnicalProfile>
    
       <TechnicalProfile Id="X-ID-Userdata">
         <DisplayName>Userdata (Personal Information)</DisplayName>
         <Protocol Name="Proprietary" Handler="Web.TPEngine.Providers.RestfulProvider, Web.TPEngine, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" />
         <Metadata>
           <Item Key="ServiceUrl">https://api-uat.x-id.io/v4/verification/userdata</Item>
           <Item Key="SendClaimsIn">Header</Item>
           <Item Key="AuthenticationType">Bearer</Item>
           <Item Key="UseClaimAsBearerToken">identityProviderAccessToken</Item>
           <!-- <Item Key="AllowInsecureAuthInProduction">true</Item> -->
           <Item Key="DebugMode">true</Item>
           <Item Key="DefaultUserMessageIfRequestFailed">Can't process your request right now, please try again later.</Item>
         </Metadata>
         <InputClaims>
           <!-- Claims sent to your REST API -->
           <InputClaim ClaimTypeReferenceId="identityProviderAccessToken" />
         </InputClaims>
         <OutputClaims>
           <!-- Claims parsed from your REST API -->
           <OutputClaim ClaimTypeReferenceId="last_name" />
           <OutputClaim ClaimTypeReferenceId="first_name" />
           <OutputClaim ClaimTypeReferenceId="previous_name" />
           <OutputClaim ClaimTypeReferenceId="year" />
           <OutputClaim ClaimTypeReferenceId="month" />
           <OutputClaim ClaimTypeReferenceId="date" />
           <OutputClaim ClaimTypeReferenceId="prefecture" />
           <OutputClaim ClaimTypeReferenceId="city" />
           <OutputClaim ClaimTypeReferenceId="address" />
           <OutputClaim ClaimTypeReferenceId="sub_char_common_name" />
           <OutputClaim ClaimTypeReferenceId="sub_char_previous_name" />
           <OutputClaim ClaimTypeReferenceId="sub_char_address" />
           <OutputClaim ClaimTypeReferenceId="gender" />
           <OutputClaim ClaimTypeReferenceId="verified_at" />
         </OutputClaims>
         <UseTechnicalProfileForSessionManagement ReferenceId="SM-Noop" />
       </TechnicalProfile>
     </TechnicalProfiles>
     </ClaimsProvider>
    
    
  6. Задайте client_id с вашим идентификатором приложения xID.

  7. Щелкните Сохранить.

Добавление пути взаимодействия пользователя

Добавьте поставщика удостоверений на страницы входа.

  1. Если у вас есть пользовательский путь взаимодействия пользователя, перейдите к разделу Добавление поставщика удостоверений в путь взаимодействия пользователя. В противном случае создайте дубликат пути взаимодействия пользователя шаблона:
  2. В начальном пакете откройте TrustFrameworkBase.xml.
  3. Найдите и скопируйте содержимое элемента UserJourneys , включающего ID=SignUpOrSignIn.
  4. Откройте TrustFrameworkExtensions.xml и найдите элемент UserJourneys. Если ее нет, добавьте ее.
  5. Вставьте содержимое элемента UserJourney в качестве дочернего элемента элемента UserJourneys.
  6. Переименуйте идентификатор пути взаимодействия пользователя. Например ID=CustomSignUpSignIn.

Добавление поставщика удостоверений в путь взаимодействия пользователя

Добавьте новый поставщик удостоверений в путь взаимодействия пользователя.

  1. Найдите элемент шага оркестрации с type=CombinedSignInAndSignUp, или Type=ClaimsProviderSelection в пути взаимодействия пользователя. Обычно это первый шаг оркестрации. Элемент ClaimsProviderSelections содержит список поставщиков удостоверений для входа. Порядок элементов управляет порядком кнопок входа.
  2. Добавьте XML-элемент ClaimsProviderSelection.
  3. Присвойте значению TargetClaimsExchangeId понятное имя.
  4. Добавьте элемент ClaimsExchange .
  5. Задайте для идентификатора значение целевого идентификатора обмена утверждениями. Это изменение связывает кнопку xID с действием X-IDExchange .
  6. Обновите значение TechnicalProfileReferenceId до созданного идентификатора технического профиля (X-ID-OIDC).
  7. Добавьте шаг оркестрации для вызова конечной точки xID UserInfo для возврата утверждений о пользователе X-ID-Userdata, прошедшем проверку подлинности.

В следующем XML-коде показана оркестрация пути взаимодействия пользователя с помощью поставщика удостоверений xID.


 <UserJourney Id="CombinedSignInAndSignUp">
   <OrchestrationSteps>

     <OrchestrationStep Order="1" Type="CombinedSignInAndSignUp" ContentDefinitionReferenceId="api.signuporsignin">
       <ClaimsProviderSelections>
         <ClaimsProviderSelection TargetClaimsExchangeId="X-IDExchange" />
       </ClaimsProviderSelections>
     </OrchestrationStep>

     <OrchestrationStep Order="2" Type="ClaimsExchange">
       <ClaimsExchanges>
         <ClaimsExchange Id="X-IDExchange" TechnicalProfileReferenceId="X-ID-OIDC" />
       </ClaimsExchanges>
     </OrchestrationStep>

     <OrchestrationStep Order="3" Type="ClaimsExchange">
       <ClaimsExchanges>
         <ClaimsExchange Id="X-ID-Userdata" TechnicalProfileReferenceId="X-ID-Userdata" />
       </ClaimsExchanges>
     </OrchestrationStep>

     <!-- For social IDP authentication, attempt to find the user account in the directory. -->
     <OrchestrationStep Order="4" Type="ClaimsExchange">
       <ClaimsExchanges>
         <ClaimsExchange Id="AADUserReadUsingAlternativeSecurityId" TechnicalProfileReferenceId="AAD-UserReadUsingAlternativeSecurityId-NoError" />
       </ClaimsExchanges>
     </OrchestrationStep>

     <!-- Show self-asserted page only if the directory does not have the user account already (i.e. we do not have an objectId).  -->
     <OrchestrationStep Order="5" Type="ClaimsExchange">
       <Preconditions>
         <Precondition Type="ClaimsExist" ExecuteActionsIf="true">
           <Value>objectId</Value>
           <Action>SkipThisOrchestrationStep</Action>
         </Precondition>
       </Preconditions>
       <ClaimsExchanges>
         <ClaimsExchange Id="SelfAsserted-Social" TechnicalProfileReferenceId="SelfAsserted-Social" />
       </ClaimsExchanges>
     </OrchestrationStep>

     <!-- The previous step (SelfAsserted-Social) could have been skipped if there were no attributes to collect 
          from the user. So, in that case, create the user in the directory if one does not already exist 
          (verified using objectId which would be set from the last step if account was created in the directory. -->
     <OrchestrationStep Order="6" Type="ClaimsExchange">
       <Preconditions>
         <Precondition Type="ClaimsExist" ExecuteActionsIf="true">
           <Value>objectId</Value>
           <Action>SkipThisOrchestrationStep</Action>
         </Precondition>
       </Preconditions>
       <ClaimsExchanges>
         <ClaimsExchange Id="AADUserWrite" TechnicalProfileReferenceId="AAD-UserWriteUsingAlternativeSecurityId" />
       </ClaimsExchanges>
     </OrchestrationStep>

     <OrchestrationStep Order="7" Type="SendClaims" CpimIssuerTechnicalProfileReferenceId="JwtIssuer" />

   </OrchestrationSteps>
   <ClientDefinition ReferenceId="DefaultWeb" />
 </UserJourney>

Существуют утверждения удостоверений, поддерживаемые xID, на которые ссылается как часть политики. Схема утверждений — это место, где объявляют утверждения. Элемент ClaimsSchema содержит список элементов ClaimType. Элемент ClaimType содержит атрибут ID, который является именем утверждения.

  1. Откройте TrustFrameworksExtension.xml.
  2. Найдите элемент BuildingBlocks .
  3. Добавьте следующий элемент ClaimType в элемент ClaimsSchema политики TrustFrameworksExtension.xml .
 <BuildingBlocks>
    <ClaimsSchema>
      <!-- xID -->
      <ClaimType Id="sid">
        <DisplayName>sid</DisplayName>
        <DataType>string</DataType>
      </ClaimType>
      <ClaimType Id="userdataid">
        <DisplayName>userdataid</DisplayName>
        <DataType>string</DataType>
      </ClaimType>
      <ClaimType Id="xid_verified">
        <DisplayName>xid_verified</DisplayName>
        <DataType>boolean</DataType>
      </ClaimType>
      <ClaimType Id="email_verified">
        <DisplayName>email_verified</DisplayName>
        <DataType>boolean</DataType>
      </ClaimType>
      <ClaimType Id="identityProviderAccessToken">
        <DisplayName>Identity Provider Access Token</DisplayName>
        <DataType>string</DataType>
        <AdminHelpText>Stores the access token of the identity provider.</AdminHelpText>
      </ClaimType>
      <ClaimType Id="last_name">
        <DisplayName>last_name</DisplayName>
        <DataType>string</DataType>
      </ClaimType>
      <ClaimType Id="first_name">
        <DisplayName>first_name</DisplayName>
        <DataType>string</DataType>
      </ClaimType>
      <ClaimType Id="previous_name">
        <DisplayName>previous_name</DisplayName>
        <DataType>string</DataType>
      </ClaimType>
      <ClaimType Id="year">
        <DisplayName>year</DisplayName>
        <DataType>string</DataType>
      </ClaimType>
      <ClaimType Id="month">
        <DisplayName>month</DisplayName>
        <DataType>string</DataType>
      </ClaimType>
      <ClaimType Id="date">
        <DisplayName>date</DisplayName>
        <DataType>string</DataType>
      </ClaimType>
      <ClaimType Id="prefecture">
        <DisplayName>prefecture</DisplayName>
        <DataType>string</DataType>
      </ClaimType>
      <ClaimType Id="city">
        <DisplayName>city</DisplayName>
        <DataType>string</DataType>
      </ClaimType>
      <ClaimType Id="address">
        <DisplayName>address</DisplayName>
        <DataType>string</DataType>
      </ClaimType>
      <ClaimType Id="sub_char_common_name">
        <DisplayName>sub_char_common_name</DisplayName>
        <DataType>string</DataType>
      </ClaimType>
      <ClaimType Id="sub_char_previous_name">
        <DisplayName>sub_char_previous_name</DisplayName>
        <DataType>string</DataType>
      </ClaimType>
      <ClaimType Id="sub_char_address">
        <DisplayName>sub_char_address</DisplayName>
        <DataType>string</DataType>
      </ClaimType>
      <ClaimType Id="verified_at">
        <DisplayName>verified_at</DisplayName>
        <DataType>int</DataType>
      </ClaimType>
      <ClaimType Id="gender">
        <DisplayName>Gender</DisplayName>
        <DataType>string</DataType>
        <DefaultPartnerClaimTypes>
          <Protocol Name="OpenIdConnect" PartnerClaimType="gender" />
        </DefaultPartnerClaimTypes>
        <AdminHelpText>The user's gender.</AdminHelpText>
        <UserHelpText>Your gender.</UserHelpText>
        <UserInputType>TextBox</UserInputType>
      </ClaimType>
      <ClaimType Id="correlationId">
        <DisplayName>correlation ID</DisplayName>
        <DataType>string</DataType>
      </ClaimType>
      <!-- xID -->
    </ClaimsSchema>
  </BuildingBlocks>

Настройка политики проверяющей стороны

Политика проверяющей стороны, например SignUpSignIn.xml, указывает путь взаимодействия пользователя, который выполняет Azure AD B2C.

  1. В проверяющей стороне найдите элемент DefaultUserJourney .
  2. Обновите ReferenceId в соответствии с идентификатором пути взаимодействия пользователя, добавленным в поставщик удостоверений.

В следующем примере для пути взаимодействия пользователя xID параметр ReferenceId имеет значение CombinedSignInAndSignUp.

   <RelyingParty>
        <DefaultUserJourney ReferenceId="CombinedSignInAndSignUp" />
        <TechnicalProfile Id="PolicyProfile">
          <DisplayName>PolicyProfile</DisplayName>
          <Protocol Name="OpenIdConnect" />
          <OutputClaims>
          <OutputClaim ClaimTypeReferenceId="objectId" PartnerClaimType="sub" />
          <OutputClaim ClaimTypeReferenceId="tenantId" AlwaysUseDefaultValue="true" DefaultValue="{Policy:TenantObjectId}" />
          <OutputClaim ClaimTypeReferenceId="correlationId" DefaultValue="{Context:CorrelationId}" />
          <OutputClaim ClaimTypeReferenceId="issuerUserId" />
          <OutputClaim ClaimTypeReferenceId="givenName" PartnerClaimType="first_name" />
          <OutputClaim ClaimTypeReferenceId="surName" PartnerClaimType="last_name" />
          <OutputClaim ClaimTypeReferenceId="previous_name" />
          <OutputClaim ClaimTypeReferenceId="year" />
          <OutputClaim ClaimTypeReferenceId="month" />
          <OutputClaim ClaimTypeReferenceId="date" />
          <OutputClaim ClaimTypeReferenceId="prefecture" />
          <OutputClaim ClaimTypeReferenceId="city" />
          <OutputClaim ClaimTypeReferenceId="address" />
          <OutputClaim ClaimTypeReferenceId="sub_char_common_name" />
          <OutputClaim ClaimTypeReferenceId="sub_char_previous_name" />
          <OutputClaim ClaimTypeReferenceId="sub_char_address" />
          <OutputClaim ClaimTypeReferenceId="gender" />
          <OutputClaim ClaimTypeReferenceId="verified_at" />
          <OutputClaim ClaimTypeReferenceId="email" />
          <OutputClaim ClaimTypeReferenceId="sid" />
          <OutputClaim ClaimTypeReferenceId="userdataid" />
          <OutputClaim ClaimTypeReferenceId="xid_verified" />
          <OutputClaim ClaimTypeReferenceId="email_verified" />
          </OutputClaims>
          <SubjectNamingInfo ClaimType="sub" />
        </TechnicalProfile>
      </RelyingParty>

Передача настраиваемой политики

Для выполнения следующих инструкций используйте каталог с клиентом Azure AD B2C.

  1. Войдите на портал Azure.
  2. На панели инструментов портала выберите Каталоги и подписки.
  3. Параметры портала | Страница Каталоги и подписки в списке Имя каталога . найдите каталог B2C Azure AD.
  4. Выберите Переключить.
  5. На портале Azure найдите и выберите Azure AD B2C.
  6. В разделе "Политики" выберите Identity Experience Framework.
  7. Выберите Отправить настраиваемую политику.
  8. Отправьте файлы в следующем порядке:
  • Базовый файл политики: TrustFrameworkBase.xml
  • Политика расширения: TrustFrameworkExtensions.xml
  • Политика проверяющей стороны: SignUpSignIn.xml

Проверка пользовательской политики

  1. Откройте арендатор Azure AD B2C и в разделе Политики выберите Identity Experience Framework.
  2. В разделе Настраиваемые политики выберите CustomSignUpSignIn.
  3. В поле Приложение выберите зарегистрированное веб-приложение. URL-адрес ответаhttps://jwt.ms.
  4. Выберите Запустить сейчас.
  5. Браузер перенаправляется на страницу входа xID.
  6. Браузер перенаправляется на https://jwt.ms. Отобразится содержимое маркера, возвращенное Azure AD B2C.

Дальнейшие действия