Многопользовательская Azure AD в Azure AD B2C
Я следил за ответом здесь: мультитенантная аутентификация Azure AD в Azure AD B2C с настраиваемыми политиками
И прохождение здесь: https://github.com/Azure-Samples/active-directory-b2c-advanced-policies/blob/0129fc013ae5e66a3ee0046a5d0db2e8120d8f8e/Walkthroughs/IdP-AzureAD.md
Но я не смог войти, сообщение об ошибке что-то вроде строки:
AADB2C: An exception has occured. Correlation ID: <GUID>. Timestamp: <Time>
Кроме того, при просмотре пошагового руководства в последнем мастере вся страница была удалена и теперь содержит только ссылку на https://docs.microsoft.com/en-us/azure/active-directory-b2c/active-directory-b2c-setup-aad-custom, который не показывает, как настроить ClaimsProvider для многопользовательского IDP Azure AD.
Сообщение об ошибке не было супер полезно, и я заблудился.
Мой технический профиль выглядит следующим образом:
<ClaimsProvider>
<Domain>AzureAD</Domain>
<DisplayName>Login using Azure AD</DisplayName>
<TechnicalProfiles>
<TechnicalProfile Id="AzureADProfile">
<DisplayName>Azure AD</DisplayName>
<Description>Login with your Azure AD account</Description>
<Protocol Name="OpenIdConnect"/>
<OutputTokenFormat>JWT</OutputTokenFormat>
<Metadata>
<Item Key="DiscoverMetadataByTokenIssuer">true</Item>
<Item Key="ValidTokenIssuerPrefixes">https://login.microsoftonline.com/</Item>
<Item Key="authorization_endpoint">https://login.windows.net/common/oauth2/v2.0/authorize</Item>
<Item Key="client_id">MyAzureADB2CAppId</Item>
<Item Key="IdTokenAudience">MyAzureADB2CAppId</Item>
<Item Key="response_types">id_token</Item>
<Item Key="UsePolicyInRedirectUri">false</Item>
<Item Key="BearerTokenTransmissionMethod">AuthorizationHeader</Item>
<Item Key="scope">openid</Item>
<Item Key="HttpBinding">POST</Item>
</Metadata>
<CryptographicKeys>
<Key Id="client_secret" StorageReferenceId="B2C_1A_B2CSecret"/>
</CryptographicKeys>
<OutputClaims>
<OutputClaim ClaimTypeReferenceId="socialIdpUserId" PartnerClaimType="oid"/>
<OutputClaim ClaimTypeReferenceId="tenantId" PartnerClaimType="tid"/>
<OutputClaim ClaimTypeReferenceId="email" PartnerClaimType="unique_name" />
<OutputClaim ClaimTypeReferenceId="givenName" PartnerClaimType="given_name" />
<OutputClaim ClaimTypeReferenceId="surName" PartnerClaimType="family_name" />
<OutputClaim ClaimTypeReferenceId="displayName" PartnerClaimType="name" />
<OutputClaim ClaimTypeReferenceId="authenticationSource" DefaultValue="azureADAuthentication" />
<OutputClaim ClaimTypeReferenceId="identityProvider" DefaultValue="AzureAD" />
</OutputClaims>
<OutputClaimsTransformations>
<OutputClaimsTransformation ReferenceId="CreateRandomUPNUserName"/>
<OutputClaimsTransformation ReferenceId="CreateUserPrincipalName"/>
<OutputClaimsTransformation ReferenceId="CreateAlternativeSecurityId"/>
<OutputClaimsTransformation ReferenceId="CreateSubjectClaimFromAlternativeSecurityId"/>
</OutputClaimsTransformations>
<UseTechnicalProfileForSessionManagement ReferenceId="SM-Noop"/>
</TechnicalProfile>
</TechnicalProfiles>
</ClaimsProvider>
РЕДАКТИРОВАТЬ: После введения User Journey Recorder в соответствии с предложением spottedhahn, мне удалось получить настоящую ошибку:
The response received from the ClaimsProvider using TechnicalProfile
"<My_Azure_AD_Common_Profile>" in policy "<My_RP_Policy>" of tenant
"<My_B2C_Tenant>" did not contain an "id_token".
Вопрос в том, поддерживается ли связывание мультитенантного Azure AD с Azure AD B2C, и как я могу настроить его для работы?
1 ответ
При интеграции Azure AD B2C с общей конечной точкой Azure AD вы можете интегрироваться с:
- Конечная точка v1.0:
https://login.microsoftonline.com/common/oauth2/authorize
- Конечная точка v2.0:
https://login.microsoftonline.com/common/oauth2/v2.0/authorize
конечная точка v1.0
Чтобы интегрировать Azure AD B2C с конечной точкой v1.0, необходимо зарегистрировать Azure AD B2C через портал Azure с вашим клиентом Azure AD:
- Войдите на портал Azure.
- В верхней панели выберите каталог Azure AD.
- В левой панели выберите Все услуги и найдите "Регистрация приложений".
- Выберите Регистрация нового приложения.
- В поле Имя введите имя приложения, например "Azure AD B2C".
- В Тип приложения выберите Веб-приложение / API.
- В URL для входа введите
https://login.microsoftonline.com/te/<tenant>/oauth2/authresp
где вы заменяете<tenant>
с именем вашего клиента Azure AD B2C (например, "contosob2c.onmicrosoft.com"). - Выберите Создать.
- Скопируйте идентификатор приложения на потом.
- Выберите Настройки, а затем выберите Ключи.
- В разделе " Пароли " введите описание пароля, выберите длительность пароля, выберите " Сохранить", а затем скопируйте значение пароля для дальнейшего использования.
Затем необходимо создать ключ политики (например, "AzureADClientSecret") через портал Azure AD B2C с секретом приложения из шага 11.
Затем необходимо обновить технический профиль Azure AD, установив следующие параметры:
<TechnicalProfile Id="AzureADAccountProfile">
<DisplayName>Log in with your work account</DisplayName>
<Protocol Name="OpenIdConnect"/>
<OutputTokenFormat>JWT</OutputTokenFormat>
<Metadata>
<Item Key="authorization_endpoint">https://login.microsoftonline.com/common/oauth2/authorize</Item>
<Item Key="client_id"><!-- Enter the application ID from step 9 --></Item>
<Item Key="DiscoverMetadataByTokenIssuer">true</Item>
<Item Key="HttpBinding">POST</Item>
<Item Key="IdTokenAudience"><!-- Enter the application ID from step 9 --></Item>
<Item Key="response_types">id_token</Item>
<Item Key="scope">openid</Item>
<Item Key="UsePolicyInRedirectUri">false</Item>
<Item Key="ValidTokenIssuerPrefixes">https://sts.windows.net/</Item>
</Metadata>
<CryptographicKeys>
<Key Id="client_secret" StorageReferenceId="B2C_1A_AzureADClientSecret"/>
</CryptographicKeys>
<OutputClaims>
<OutputClaim ClaimTypeReferenceId="authenticationSource" DefaultValue="enterpriseAuthentication" />
<OutputClaim ClaimTypeReferenceId="displayName" PartnerClaimType="name" />
<OutputClaim ClaimTypeReferenceId="identityProvider" DefaultValue="tid" />
<OutputClaim ClaimTypeReferenceId="socialIdpUserId" PartnerClaimType="oid" />
...
</OutputClaims>
<OutputClaimsTransformations>
<OutputClaimsTransformation ReferenceId="CreateRandomUPNUserName"/>
<OutputClaimsTransformation ReferenceId="CreateUserPrincipalName"/>
<OutputClaimsTransformation ReferenceId="CreateAlternativeSecurityId"/>
</OutputClaimsTransformations>
<UseTechnicalProfileForSessionManagement ReferenceId="ReferenceId="SM-Noop" />
</TechnicalProfile>
Конечная точка v2.0
Чтобы интегрировать Azure AD B2C с конечной точкой v2.0, необходимо зарегистрировать Azure AD B2C через портал регистрации приложений с вашим клиентом Azure AD:
- Войдите на портал регистрации приложений.
- Выберите Добавить приложение.
- В поле Имя приложения введите имя приложения, например "Azure AD B2C", а затем выберите " Создать".
- Скопируйте идентификатор приложения на потом.
- В разделе " Секреты приложения" выберите " Создать новый пароль", а затем скопируйте значение пароля для дальнейшего использования.
- В разделе " Платформы " выберите " Добавить платформу", выберите " Интернет" и введите URL-адрес перенаправления как
https://login.microsoftonline.com/te/<tenant>/oauth2/authresp
где вы заменяете<tenant>
с именем вашего клиента Azure AD B2C (например, "contosob2c.onmicrosoft.com"). - В нижней панели выберите Сохранить.
Затем необходимо создать ключ политики (например, "AzureADClientSecret") через портал Azure AD B2C с секретом приложения из шага 5.
Затем необходимо обновить технический профиль Azure AD, установив следующие параметры:
<TechnicalProfile Id="AzureADAccountProfile">
<DisplayName>Log in with your work account</DisplayName>
<Protocol Name="OpenIdConnect"/>
<OutputTokenFormat>JWT</OutputTokenFormat>
<Metadata>
<Item Key="authorization_endpoint">https://login.microsoftonline.com/common/oauth2/v2.0/authorize</Item>
<Item Key="client_id"><!-- Enter the application ID from step 4 --></Item>
<Item Key="DiscoverMetadataByTokenIssuer">true</Item>
<Item Key="HttpBinding">POST</Item>
<Item Key="IdTokenAudience"><!-- Enter the application ID from step 4 --></Item>
<Item Key="response_types">id_token</Item>
<Item Key="scope">openid profile</Item>
<Item Key="UsePolicyInRedirectUri">false</Item>
<Item Key="ValidTokenIssuerPrefixes">https://login.microsoftonline.com/</Item>
</Metadata>
<CryptographicKeys>
<Key Id="client_secret" StorageReferenceId="B2C_1A_AzureADClientSecret"/>
</CryptographicKeys>
<OutputClaims>
<OutputClaim ClaimTypeReferenceId="authenticationSource" DefaultValue="enterpriseAuthentication" />
<OutputClaim ClaimTypeReferenceId="displayName" PartnerClaimType="name" />
<OutputClaim ClaimTypeReferenceId="identityProvider" DefaultValue="tid" />
<OutputClaim ClaimTypeReferenceId="socialIdpUserId" PartnerClaimType="oid" />
...
</OutputClaims>
<OutputClaimsTransformations>
<OutputClaimsTransformation ReferenceId="CreateRandomUPNUserName"/>
<OutputClaimsTransformation ReferenceId="CreateUserPrincipalName"/>
<OutputClaimsTransformation ReferenceId="CreateAlternativeSecurityId"/>
</OutputClaimsTransformations>
<UseTechnicalProfileForSessionManagement ReferenceId="ReferenceId="SM-Noop" />
</TechnicalProfile>