Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Это важно
Начиная с 1 мая 2025 г. Azure AD B2C больше не будет доступен для приобретения для новых клиентов. Дополнительные сведения см. в разделе "Вопросы и ответы".
В этом руководстве описано, как интегрировать проверку подлинности Azure Active Directory B2C (Azure AD B2C) с решением цифрового идентификатора xID. Приложение xID предоставляет пользователям безпарольную, безопасную, многофакторную аутентификацию. Карточка "Мой номер", цифровая карта идентификатора, выданная японским правительством, проверяет удостоверения пользователей, прошедших проверку подлинности xID. Для своих пользователей организации могут получать проверенные личные идентификационные данные (содержимое клиента) через API xID. Кроме того, приложение xID создает закрытый ключ в безопасной области на мобильных устройствах пользователей, что делает их устройствами цифровой подписи.
Предпосылки
подписка Azure
- Если у вас ее нет, получите бесплатную учетную запись Azure.
Клиент Azure AD B2C, связанный с подпиской Azure
Сведения о клиенте xID, предоставляемые xID inc.
Перейдите на страницу xid.inc Contact Us для сведений о клиенте xID:
- Идентификатор клиента
- Секрет клиента
- URL-адрес перенаправления
- Области применения
Перейдите к x-id.me, чтобы установить приложение xID на мобильном устройстве:
- Моя номерная карточка
- Если вы используете версию API UAT, получите версию UAT приложения xID. См. Свяжитесь с нами
Описание сценария
На следующей схеме показана архитектура.
- На странице входа в Azure AD B2C пользователь входит или регистрируется.
- Azure AD B2C перенаправляет пользователя на конечную точку авторизации API xID с помощью запроса OpenID Connect (OIDC). Конечная точка OIDC содержит сведения о конечной точке. Поставщик удостоверений xID (IdP) перенаправляет пользователя на страницу авторизации входа xID. Пользователь вводит адрес электронной почты.
- XID IdP отправляет push-уведомление на мобильное устройство пользователя.
- Пользователь открывает приложение xID, проверяет запрос, вводит ПИН-код или использует биометрические данные. Приложение xID активирует закрытый ключ и создает электронную подпись.
- Приложение xID отправляет подпись в xID IdP для проверки.
- Откроется экран согласия для предоставления личной информации службе.
- Идентификатор xID возвращает код авторизации OAuth в Azure AD B2C.
- Azure AD B2C отправляет запрос токена с помощью кода авторизации.
- xID IdP проверяет запрос токена. Если действителен, возвращается токен доступа OAuth и токен идентификатора с идентификатором пользователя и адресом электронной почты.
- Если требуется контент пользователя, Azure AD B2C вызывает API пользовательских данных xID.
- API данных пользователя xID возвращает зашифрованное содержимое клиента. Пользователи выполняют расшифровку с помощью закрытого ключа, который создается при запросе информации о клиенте xID.
- Пользователю предоставлен или запрещен доступ к клиентскому приложению.
Установка xID
- Чтобы запросить документы API, заполните форму запроса. Перейдите к Свяжитесь с нами.
- В сообщении укажите, что вы используете Azure AD B2C.
- С вами связывается представитель по продажам xID.
- Следуйте инструкциям в документе API xID.
- Запросите клиента API xID.
- Специалисты по технической поддержке xID отправляют сведения о клиенте в 3–4 рабочих днях.
- Укажите 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 Active Directory B2C .
Создание ключа политики xID
Сохраните секрет клиента из xID в клиенте Azure AD B2C. Для выполнения следующих инструкций используйте каталог с клиентом Azure AD B2C.
- Войдите на портал Azure.
- На панели инструментов портала выберите каталоги и подписки.
- Параметры портала | На странице каталогов и подписок в списке имен каталогов найдите каталог Azure AD B2C.
- Выберите Переключиться.
- В левом верхнем углу портала Azure выберите все службы.
- Найдите и выберите Azure AD B2C.
- В обзоре выберите Identity Experience Framework.
- Выберите Ключи политики.
- Нажмите кнопку "Добавить".
- В разделе "Параметры" выберите "Вручную".
- Введите имя для ключа политики. Префикс
B2C_1A_добавляется к имени ключа. - В поле Секрет введите секрет клиента из xID.
- Для назначения ключа выберите Подпись.
- Нажмите кнопку "Создать".
Замечание
В Azure AD B2C пользовательские политики предназначены для сложных сценариев.
См. общие сведения о потоках пользователей и пользовательских политиках.
Настройка xID в качестве поставщика идентификации
Чтобы пользователи могли входить с помощью xID, сделайте xID поставщиком утверждений, с которым Azure AD B2C взаимодействовала через конечную точку. Конечная точка предоставляет сведения Azure AD B2C, которые используются для верификации пользователей, прошедших аутентификацию с помощью цифрового удостоверения на их устройстве.
Добавьте xID в качестве поставщика утверждений
Получите начальные пакеты настраиваемой политики из GitHub, а затем обновите XML-файлы в начальном пакете SocialAccounts с именем клиента Azure AD B2C.
Скачайте ZIP-файл active-directory-b2c-policy-starterpack-main или клонируйте репозиторий. См. раздел Azure-Samples/active-directory-b2c-custom-policy-starterpack.
В файлах в каталоге SocialAccounts замените строку
yourtenantименем клиента Azure AD B2C. Например,yourtenant.onmicrosoft.comпреобразуется вcontoso.onmicrosoft.com.Откройте SocialAccounts/TrustFrameworkExtensions.xml.
Найдите элемент ClaimsProviders . Если его нет, добавьте его в корневой элемент.
Добавьте новый 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">00001111-aaaa-2222-bbbb-3333cccc4444</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>Задайте client_id с идентификатором приложения xID.
Нажмите кнопку "Сохранить".
Добавить пользовательский сценарий
Добавьте поставщика удостоверений на страницы входа на сайт.
- Если у вас есть кастомное пользовательское путешествие, перейдите к добавлению поставщика идентификации в пользовательское путешествие. В противном случае создайте копию шаблонного пути пользователя.
- В начальном пакете откройте TrustFrameworkBase.xml.
- Найдите и скопируйте содержимое элемента UserJourneys , который включает в себя
ID=SignUpOrSignIn. - Откройте TrustFrameworkExtensions.xml и найдите элемент UserJourneys. Если его нет, добавьте его.
- Вставьте содержимое элемента UserJourney в качестве дочернего элемента UserJourneys.
- Переименуйте идентификатор пути пользователя. Например:
ID=CustomSignUpSignIn
Добавьте поставщика удостоверений в путь пользователя
Добавьте нового поставщика удостоверений в путь пользователя.
- Найдите элемент шага оркестрации с типом=
CombinedSignInAndSignUpили Type=ClaimsProviderSelectionв пути пользователя. Обычно это первый шаг оркестрации. Элемент ClaimsProviderSelections содержит список поставщиков удостоверений для входа. Порядок элементов определяет порядок кнопок входа. - Добавьте XML-элемент ClaimsProviderSelection .
- Задайте для параметра TargetClaimsExchangeId понятное имя.
- Добавьте элемент ClaimsExchange .
- Установите ID в значение идентификатора целевого обмена утверждениями. Это изменение связывает кнопку xID с действием
X-IDExchange. - Обновите значение TechnicalProfileReferenceId до созданного идентификатора технического профиля (
X-ID-OIDC). - Добавьте шаг оркестрации, чтобы вызвать конечную точку 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, который является именем утверждения.
- Откройте TrustFrameworksExtension.xml.
- Найдите элемент BuildingBlocks .
- Добавьте следующий элемент 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.
- В доверяющей стороне найдите элемент DefaultUserJourney.
- Обновите ReferenceId, чтобы он соответствовал идентификатору пути пользователя, который вы добавили к поставщику удостоверений.
В следующем примере для пути взаимодействия пользователя xID значение ReferenceId установлено на .
<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.
- Войдите на портал Azure.
- На панели инструментов портала выберите каталоги и подписки.
- На странице Параметры портала | Каталоги + подписки в списке имена каталогов. найдите каталог Azure AD B2C.
- Выберите Переключиться.
- На портале Azure найдите и выберите Azure AD B2C.
- В разделе "Политики" выберите Identity Experience Framework.
- Выберите "Отправить настраиваемую политику".
- Отправьте файлы в следующем порядке:
- Базовый файл политики:
TrustFrameworkBase.xml - Политика расширения:
TrustFrameworkExtensions.xml - Политика стороны, осуществляющей проверку:
SignUpSignIn.xml
Проверка настраиваемой политики
- В клиенте Azure AD B2C и в разделе "Политики" выберите "Платформа взаимодействия с удостоверениями".
- В разделе "Пользовательские политики" выберите CustomSignUpSignIn.
- Для приложения выберите зарегистрированное веб-приложение.
URL-адрес ответа .
https://jwt.ms - Выберите Запустить немедленно.
- Браузер перенаправляется на страницу входа xID.
- Браузер перенаправляется в
https://jwt.ms. Отображается содержимое токена, возвращаемое Azure AD B2C.