Настройка регистрации и входа с помощью универсального протокола OpenID Connect через Azure Active Directory B2C
Для начала с помощью селектора Choose a policy type (Выбрать тип политики) выберите тип пользовательской политики. Azure Active Directory B2C предлагает два метода определения способа взаимодействия пользователей с вашими приложениями: с помощью предопределенных потоков пользователей или полностью настраиваемых пользовательских политик. Действия, которые необходимо выполнить, отличаются для каждого метода.
OpenID Connect — это протокол проверки подлинности на основе OAuth 2.0, который может использоваться для безопасного входа пользователей. Azure AD B2C поддерживает большинство поставщиков удостоверений, использующих этот протокол.
В этой статье объясняется, как можно добавить пользовательских поставщиков удостоверений OpenID Connect в потоки пользователя.
Важно!
Ваши конечные точки должны соответствовать требованиям безопасности Azure AD B2C. Ранние версии и шифры TLS считаются нерекомендуемыми. Дополнительные сведения см. в статье Требования к комплекту шифров и TLS в Azure AD B2C.
Необходимые компоненты
- Создайте поток пользователя, чтобы пользователи могли зарегистрироваться и входить в ваше приложение.
- Зарегистрируйте веб-приложение.
- Выполните шаги, описанные в статье Начало работы с настраиваемыми политиками в Azure Active Directory B2C.
- Зарегистрируйте веб-приложение.
Добавление поставщика удостоверений
- Войдите на портал Azure с правами глобального администратора клиента Azure AD B2C.
- Если у вас есть доступ к нескольким клиентам, выберите значок Параметры в верхнем меню, чтобы переключиться на клиент Azure AD B2C из меню каталогов и подписок.
- Выберите Все службы в левом верхнем углу окна портала Azure, найдите службу Azure AD B2C и выберите ее.
- Щелкните элемент Поставщики удостоверений, а затем выберите Новый поставщик OpenID Connect.
- Введите Имя. Например, введите Contoso.
Определите поставщик удостоверений OpenId Connect, добавив его в элемент ClaimsProviders в файле расширения вашей политики.
Откройте файл TrustFrameworkExtensions.xml.
Найдите элемент ClaimsProviders. Если он не существует, добавьте его в корневой элемент.
Добавьте новый элемент ClaimsProvider следующим образом.
<ClaimsProvider> <Domain>contoso.com</Domain> <DisplayName>Login with Contoso</DisplayName> <TechnicalProfiles> <TechnicalProfile Id="Contoso-OpenIdConnect"> <DisplayName>Contoso</DisplayName> <Description>Login with your Contoso account</Description> <Protocol Name="OpenIdConnect"/> <Metadata> <Item Key="METADATA">https://your-identity-provider.com/.well-known/openid-configuration</Item> <Item Key="client_id">00000000-0000-0000-0000-000000000000</Item> <Item Key="response_types">code</Item> <Item Key="scope">openid profile</Item> <Item Key="response_mode">form_post</Item> <Item Key="HttpBinding">POST</Item> <Item Key="UsePolicyInRedirectUri">false</Item> </Metadata> <!-- <CryptographicKeys> <Key Id="client_secret" StorageReferenceId="B2C_1A_ContosoSecret"/> </CryptographicKeys> --> <OutputClaims> <OutputClaim ClaimTypeReferenceId="issuerUserId" PartnerClaimType="oid"/> <OutputClaim ClaimTypeReferenceId="tenantId" PartnerClaimType="tid"/> <OutputClaim ClaimTypeReferenceId="givenName" PartnerClaimType="given_name" /> <OutputClaim ClaimTypeReferenceId="surName" PartnerClaimType="family_name" /> <OutputClaim ClaimTypeReferenceId="displayName" PartnerClaimType="name" /> <OutputClaim ClaimTypeReferenceId="email" PartnerClaimType="email" /> <OutputClaim ClaimTypeReferenceId="authenticationSource" DefaultValue="socialIdpAuthentication" AlwaysUseDefaultValue="true" /> <OutputClaim ClaimTypeReferenceId="identityProvider" PartnerClaimType="iss" /> <OutputClaim ClaimTypeReferenceId="objectId" PartnerClaimType="oid"/> </OutputClaims> <OutputClaimsTransformations> <OutputClaimsTransformation ReferenceId="CreateRandomUPNUserName"/> <OutputClaimsTransformation ReferenceId="CreateUserPrincipalName"/> <OutputClaimsTransformation ReferenceId="CreateAlternativeSecurityId"/> <OutputClaimsTransformation ReferenceId="CreateSubjectClaimFromAlternativeSecurityId"/> </OutputClaimsTransformations> <UseTechnicalProfileForSessionManagement ReferenceId="SM-SocialLogin"/> </TechnicalProfile> </TechnicalProfiles> </ClaimsProvider>
Настройка поставщика удостоверений
Каждый поставщик удостоверений OpenID Connect описывает документ метаданных, который содержит большую часть сведений, необходимых для выполнения входа. Документ метаданных включает такие сведения, как используемые URL-адреса и расположение открытых ключей подписывания службы. Документ метаданных OpenID Connect всегда находится в конечной точке, которая заканчивается на .well-known/openid-configuration
. Для поставщика удостоверений OpenID Connect, которого требуется добавить, введите его URL-адрес метаданных.
В поле URL-адрес метаданных введите URL-адрес документа метаданных OpenID Connect.
В метаданные технического профиля <Item Key="METADATA">
введите URL-адрес документа метаданных OpenID Connect.
Идентификатор клиента и секрет
Чтобы разрешить пользователям выполнять вход, разработчики должны зарегистрировать приложение в своей службе, так как это требуется для поставщика удостоверений. Это приложение получит идентификатор клиента и секрет клиента.
Секрет клиента не обязателен. Но вам нужно указать секрет клиента, если тип ответа — code
, где используется секрет для обмена кода для маркера.
Чтобы добавить идентификатор клиента и секрет клиента, скопируйте эти значения из поставщика удостоверений и введите их в соответствующие поля.
В метаданные технического профиля <Item Key="client_id">
введите идентификатор клиента.
Создание ключа политики
Если требуется секрет клиента, сохраните секрет клиента, записанный ранее в арендаторе Azure AD B2C.
Войдите на портал Azure.
Убедитесь, что вы используете каталог, содержащий клиент Azure AD B2C. На панели инструментов портала выберите фильтр Каталог + подписка.
В настройках портала на странице Каталоги и подписки найдите свой каталог Azure AD B2C в списке Имя каталога и выберите Переключить.
Выберите Все службы в левом верхнем углу окна портала Azure, а затем найдите и выберите Azure AD B2C.
На странице "Обзор" выберите Identity Experience Framework.
Выберите Ключи политики, а затем щелкните Добавить.
Для пункта Параметры выберите
Manual
.Введите имя ключа политики. Например,
ContosoSecret
. ПрефиксB2C_1A_
будет автоматически добавлен к имени ключа.В поле Секрет введите ранее записанный секрет клиента.
Для параметра Использование ключа выберите
Signature
.Нажмите кнопку Создать.
В XML-элемент
CryptographicKeys
добавьте следующий элемент:<CryptographicKeys> <Key Id="client_secret" StorageReferenceId="B2C_1A_ContosoSecret"/> </CryptographicKeys>
Область действия
Области определяют сведения и разрешения, которые требуется собрать от поставщика удостоверений, например openid profile
. Чтобы получить маркер идентификатора от поставщика удостоверений, необходимо указать область openid
.
Без маркера идентификатора пользователи не смогут войти в Azure AD B2C с помощью пользовательского поставщика удостоверений. Можно присоединить другие области (разделяемые пробелом). Сведения о том, какие другие области могут быть доступны, см. в документации пользовательского поставщика удостоверений.
В поле Область введите области из поставщика удостоверений. Например, openid profile
.
В метаданные технического профиля <Item Key="scope">
введите области из поставщика удостоверений. Например, openid profile
.
Тип ответа
Тип ответа описывает, какие сведения будут отправляться обратно в исходный вызов authorization_endpoint
пользовательского поставщика удостоверений. Можно использовать следующие типы ответов:
code
: в соответствии с потоком кода авторизации, код будет возвращаться обратно в Azure AD B2C. Azure AD B2C затем перейдет к вызовуtoken_endpoint
для обмена кода для маркера.id_token
: маркер идентификатора возвращается обратно в Azure AD B2C от пользовательского поставщика удостоверений.
В поле Тип ответа выберите code
или id_token
с учетом параметров поставщика удостоверений.
В метаданных технического профиля <Item Key="response_types">
выберите code
или id_token
с учетом параметров поставщика удостоверений.
Режим ответа
Режим ответа позволяет определить метод, который следует использовать для отправки данных обратно от пользовательского поставщика удостоверений в Azure AD B2C. Можно использовать следующие режимы ответов:
form_post
: этот режим ответа рекомендуется использовать для максимальной безопасности. Ответ передается через HTTP-методPOST
с кодом или маркером, закодированным в тексте с использованием форматаapplication/x-www-form-urlencoded
.query
: код или маркер возвращается в виде параметра запроса.
В поле Режим ответа выберите form_post
или query
с учетом параметров поставщика удостоверений.
В метаданных технического профиля <Item Key="response_mode">
выберите form_post
или query
с учетом параметров поставщика удостоверений.
Указание домена
Используя указание домена, можно перейти непосредственно на страницу входа указанного поставщика удостоверений. Таким образом, пользователю не нужно будет выбирать поставщика удостоверений в списке доступных поставщиков.
Чтобы разрешить такое поведение, введите значение для указания домена. Чтобы перейти к пользовательскому поставщику удостоверений, добавьте параметр domain_hint=<domain hint value>
в конец запроса при вызове Azure AD B2C для входа.
В поле Указание домена введите доменное имя, используемое в указании домена.
В XML-элемент технического профиля <Domain>contoso.com</Domain>
введите доменное имя, используемое в указании домена. Например, contoso.com
.
Сопоставление утверждений
После того как пользовательский поставщик удостоверений отправит маркер идентификатора обратно в службу Azure AD B2C, эта служба должна иметь возможность сопоставить утверждения из полученного маркера с утверждениями, которые Azure AD B2C распознает и использует. Ознакомьтесь со сведениями о каждом приведенном ниже сопоставлении в документации пользовательского поставщика удостоверений, чтобы понимать утверждения, которые возвращаются обратно в маркерах поставщика удостоверений.
- Идентификатор пользователя: введите утверждение, которое предоставляет уникальный идентификатор для пользователя, выполнившего вход.
- Отображаемое имя: введите утверждение, которое предоставляет отображаемое имя или полное имя пользователя.
- Имя: введите утверждение, которое предоставляет имя пользователя.
- Фамилия: введите утверждение, которое предоставляет фамилию пользователя.
- Электронная почта: введите утверждение, которое предоставляет адрес электронной почты пользователя.
Элемент OutputClaims
содержит список утверждений, возвращаемых поставщиком удостоверений. Сопоставьте имя утверждения, определенное в вашей политике, с именем, определенным в поставщике удостоверений. В элементе <OutputClaims>
настройте атрибут PartnerClaimType
, используя соответствующее имя утверждения, как определено вашим поставщиком удостоверений.
ClaimTypeReferenceId | PartnerClaimType |
---|---|
issuerUserId |
Введите утверждение, которое предоставляет уникальный идентификатор для пользователя, выполнившего вход. |
displayName |
Введите утверждение, которое предоставляет пользователю отображаемое имя или полное имя. |
givenName |
Введите утверждение, которое предоставляет имя пользователя. |
surName |
Введите утверждение, которое предоставляет фамилию пользователя. |
email |
Введите утверждение, которое предоставляет адрес электронной почты пользователя. |
identityProvider |
Введите утверждение, которое предоставляет имя издателя маркера. Например, iss . Если поставщик удостоверений не включает утверждение издателя в маркер, укажите для атрибута DefaultValue уникальный идентификатор поставщика удостоверений. Например, DefaultValue="contoso.com" . |
Добавление поставщика удостоверений в поток пользователя
- В клиенте Azure AD B2C выберите Потоки пользователей.
- Выберите поток пользователя, для которого требуется добавить поставщика удостоверений.
- В разделе Поставщики удостоверений в социальных сетях выберите добавленного поставщика удостоверений (например, Contoso).
- Выберите Сохранить.
Тестирование потока пользователя
- Чтобы проверить политику, выберите Выполнить поток пользователя.
- В разделе Приложение выберите зарегистрированное ранее веб-приложение с именем testapp1. В поле URL-адрес ответа должно содержаться значение
https://jwt.ms
. - Нажмите кнопку Выполнить поток пользователя.
- На странице регистрации или входа выберите поставщика удостоверений, с помощью которого хотите войти (например, Contoso).
Если вход выполнен успешно, в браузере откроется страница https://jwt.ms
с содержимым маркера, возвращенного Azure AD B2C.
Добавление пути взаимодействия пользователя
На этом этапе поставщик удостоверений уже настроен, но еще не отображается на страницах входа. Если у вас нет собственного пути взаимодействия пользователя, создайте дубликат существующего шаблона. В противном случае перейдите к следующему шагу.
- Откройте файл TrustFrameworkBase.xml из начального пакета.
- Найдите и скопируйте все содержимое элемента UserJourney, в котором присутствует запись
Id="SignUpOrSignIn"
. - Откройте файл TrustFrameworkExtensions.xml и найдите элемент UserJourneys. Если элемент не существует, добавьте его.
- Вставьте все скопированное содержимое элемента UserJourney в качестве дочернего элемента в элемент UserJourneys.
- Переименуйте идентификатор этого пути взаимодействия пользователя. Например,
Id="CustomSignUpSignIn"
.
Добавление поставщика удостоверений в путь взаимодействия пользователя
Теперь, когда у вас есть путь взаимодействия пользователя, добавьте в него новый поставщик удостоверений. Сначала добавьте кнопку входа, а затем свяжите кнопку с действием. Это действие является техническим профилем, который вы создали ранее.
В пути взаимодействия пользователя найдите элемент шага оркестрации, включающий
Type="CombinedSignInAndSignUp"
илиType="ClaimsProviderSelection"
. Обычно это первый шаг оркестрации. Элемент ClaimsProviderSelections содержит список поставщиков удостоверений, которые пользователь может использовать для входа. Порядок элементов управляет порядком кнопок входа, представленных пользователем. Добавьте XML-элемент ClaimsProviderSelection. Присвойте значению TargetClaimsExchangeId понятное имя.На следующем шаге оркестрации добавьте элемент ClaimsExchange. Задайте в качестве Id значение идентификатора обмена утверждениями целевого объекта. Замените значение TechnicalProfileReferenceId идентификатором технического профиля, созданным ранее.
В следующем коде XML показаны первые два этапа оркестрации пути взаимодействия пользователя с поставщиком удостоверений:
<OrchestrationStep Order="1" Type="CombinedSignInAndSignUp" ContentDefinitionReferenceId="api.signuporsignin">
<ClaimsProviderSelections>
...
<ClaimsProviderSelection TargetClaimsExchangeId="ContosoExchange" />
</ClaimsProviderSelections>
...
</OrchestrationStep>
<OrchestrationStep Order="2" Type="ClaimsExchange">
...
<ClaimsExchanges>
<ClaimsExchange Id="ContosoExchange" TechnicalProfileReferenceId="Contoso-OpenIdConnect" />
</ClaimsExchanges>
</OrchestrationStep>
Настройка политики проверяющей стороны
Политика проверяющей стороны, например SignUpSignIn.xml, указывает путь взаимодействия пользователя, который будет исполнять Azure AD B2C. Найдите элемент DefaultUserJourney в элементе проверяющей стороны. Обновите ReferenceId в соответствии с идентификатором пути взаимодействия пользователя, в который добавлен поставщик удостоверений.
В следующем примере в качестве значения параметра ReferenceId пути взаимодействия пользователя CustomSignUpSignIn
задано CustomSignUpSignIn
:
<RelyingParty>
<DefaultUserJourney ReferenceId="CustomSignUpSignIn" />
...
</RelyingParty>
Передача настраиваемой политики
- Войдите на портал Azure.
- Выберите значок Каталог и подписка в верхней панели инструментов портала, а затем выберите каталог, содержащий клиент Azure AD B2C.
- В портале Azure найдите и выберите Azure AD B2C.
- В разделе Политики выберите Identity Experience Framework.
- Выберите Отправить пользовательскую политику, а затем отправьте два измененных файла политики в следующем порядке: политика расширения, например
TrustFrameworkExtensions.xml
, а затем политика проверяющей стороны, напримерSignUpSignIn.xml
.
- Выберите политику проверяющей стороны, например
B2C_1A_signup_signin
. - В разделе Приложение выберите зарегистрированное ранее веб-приложение. В поле URL-адрес ответа должно содержаться значение
https://jwt.ms
. - Нажмите кнопку Выполнить.
- На странице регистрации или входа выберите Contoso для входа с помощью учетной записи Google.
Если вход выполнен успешно, в браузере откроется страница https://jwt.ms
с содержимым маркера, возвращенного Azure AD B2C.
Известные проблемы
- Azure AD B2C не поддерживает JWE (веб-шифрование JSON) для обмена зашифрованными токенами с поставщиками удостоверений OpenID connect.
Следующие шаги
Дополнительные сведения см. в справочном руководстве Технический профиль OpenId Connect.