Арбитры утверждений в пользовательских политиках Azure Active Directory B2C
Арбитры утверждений в пользовательских политиках Azure Active Directory B2C (Azure AD B2C) предоставляют контекстные сведения о запросе авторизации, такие как имя политики, идентификатор корреляции запроса, язык интерфейса пользователя и т. д.
Чтобы использовать арбитр утверждений во входящем или исходящим утверждении, определите строку ClaimType в элементе ClaimsSchema, а затем установите DefaultValue в арбитр утверждений в элементе входящего или исходящего утверждения. Azure AD B2C считывает значение арбитра утверждений и использует значение в техническом профиле.
В следующем примере тип претензии с именем correlationId
определяется с помощью DataType из string
.
<ClaimType Id="correlationId">
<DisplayName>correlationId</DisplayName>
<DataType>string</DataType>
<UserHelpText>Request correlation Id</UserHelpText>
</ClaimType>
В техническом профиле сопоставьте арбитры утверждений с типом утверждений. Azure AD B2C заполняет значение арбитра утверждений {Context:CorrelationId}
в утверждение correlationId
и отправляет утверждение в технический профиль.
<InputClaim ClaimTypeReferenceId="correlationId" DefaultValue="{Context:CorrelationId}" />
Культура
В следующей таблице приведены арбитры утверждений с информацией о языке, используемом в запросе авторизации:
Утверждение | Description | Пример |
---|---|---|
{Culture:LanguageName} | Двухбуквенный код ISO для языка. | en |
{Culture:LCID} | Код языка (локаль). | 1033 |
{Culture:RegionName} | Двухбуквенный код ISO для региона. | US |
{Culture:RFC5646} | Код языка RFC5646. | en-US |
Ознакомьтесь с арбитрами утверждений с информацией о языке и региональных параметрах в живой демонстрации.
Политика
В следующей таблице приведены арбитры утверждений с информацией о политике, используемой в запросе авторизации:
Утверждение | Description | Пример |
---|---|---|
{Policy:PolicyId} | Имя политики проверяющей стороны. | B2C_1A_signup_signin |
{Policy:RelyingPartyTenantId} | Идентификатор клиента для политики проверяющей стороны. | your-tenant.onmicrosoft.com |
{Policy:TenantObjectId} | Идентификатор объекта клиента для политики проверяющей стороны. | 00000000-0000-0000-0000-000000000000 |
{Policy:TrustFrameworkTenantId} | Идентификатор клиента инфраструктуры доверия. | your-tenant.onmicrosoft.com |
Ознакомьтесь с арбитров утверждений с информацией о политике в живой демонстрации.
Контекст
В следующей таблице приведены контекстуальные арбитры утверждений для запроса авторизации:
Утверждение | Description | Пример |
---|---|---|
{Context:BuildNumber} | Версия инфраструктури процедур идентификации (номер сборки). | 1.0.507.0 |
{Context:CorrelationId} | Идентификатор корреляции. | 00000000-0000-0000-0000-000000000000 |
{Context:DateTimeInUtc} | Дата и время в формате UTC. | 10/10/2021 12:00:00 PM |
{Context:DeploymentMode} | Режим развертывания политики. | Производственный экземпляр |
{Context:HostName} | Имя узла в текущем запросе. | contoso.b2clogin.com |
{Context:IPAddress} | IP-адрес пользователя. | 11.111.111.11 |
{Context:KMSI} | Указывает, установлен ли флажок Оставаться в системе. | true |
Ознакомьтесь с контекстуальными арбитрами в живой демонстрации.
Претензии
В этом разделе описывается, как получить значение утверждения в виде арбитра утверждений.
Утверждение | Description | Пример |
---|---|---|
{Claim:claim type} | Идентификатор типа утверждения, который уже определен в разделе ClaimsSchema файла политики или файла родительской политики. Например, {Claim:displayName} или {Claim:objectId} . |
Значение типа утверждения. |
OpenID Connect
В следующей таблице приведены арбитры утверждений с информацией о запросе авторизации OpenID Connect:
Утверждение | Description | Пример |
---|---|---|
{OIDC:AuthenticationContextReferences} | Параметр acr_values строки запроса. |
Н/П |
{OIDC:ClientId} | Параметр client_id строки запроса. |
00001111-aaaa-2222-bbbb-3333cccc4444 |
{OIDC:DomainHint} | Параметр domain_hint строки запроса. |
facebook.com |
{OIDC:LoginHint} | Параметр login_hint строки запроса. |
someone@contoso.com |
{OIDC:MaxAge} | max_age . |
Н/П |
{OIDC:Nonce} | Параметр Nonce строки запроса. |
defaultNonce |
{OIDC:Password} | Пароль пользователя в потоке проверки учетных данных пароля. | Пароль 1 |
{OIDC:Prompt} | Параметр prompt строки запроса. |
Вход |
{OIDC:RedirectUri} | Параметр redirect_uri строки запроса. |
https://jwt.ms |
{OIDC:Resource} | Параметр resource строки запроса. |
Н/П |
{OIDC:Scope} | Параметр scope строки запроса. |
openid |
{OIDC:Username} | Имя пользователя в потоке проверки учетных данных пароля. | emily@contoso.com |
{OIDC:IdToken} | Параметр id token строки запроса. |
Н/П |
Ознакомьтесь с арбитрами утверждений с информацией о запросе авторизации OpenID Connect в живой демонстрации.
Параметры ключа-значения OAuth2
Любое имя параметра, включенное в запрос OIDC или OAuth2, можно сопоставить с утверждением в пути взаимодействия пользователя. Например, запрос из приложения может включать в себя параметр строки запроса с именем app_session
, loyalty_number
или любую пользовательскую строку запроса.
Утверждение | Description | Пример |
---|---|---|
{OAUTH-KV:campaignId} | Параметр строки запроса. | Гавайи |
{OAUTH-KV:app_session} | Параметр строки запроса. | A3C5R |
{OAUTH-KV:loyalty_number} | Параметр строки запроса. | 1 234 |
{OAUTH-KV:any custom query string} | Параметр строки запроса. | Н/П |
Параметры samL key-value
В запросе проверки подлинности SAML все имена параметров, включенные в запрос, но не относятся к протоколу (например, SAMLRequest), можно сопоставить с утверждением в пути пользователя. Например, запрос может включать настраиваемый параметр, например username
. Это относится как к запросам SAML, инициированным поставщиком услуг, так и к запросам SAML, инициированным поставщиком удостоверений.
Утверждение | Description | Пример |
---|---|---|
{SAML-KV:username} | Строка запроса или параметр текста POST. | username@domain.com |
{SAML-KV:loyalty_number} | Строка запроса или параметр текста POST. | 1 234 |
{SAML-KV:any custom query string} | Строка запроса или параметр текста POST. | Н/П |
SAML
В следующей таблице приведены арбитры утверждений с информацией о запросе авторизации SAML:
Утверждение | Description | Пример |
---|---|---|
{SAML:AuthnContextClassReferences} | Значение элемента AuthnContextClassRef из запроса SAML. |
urn:oasis:names:tc:SAML:2.0:ac:classes:PasswordProtectedTransport |
{SAML:NameIdPolicyFormat} | Атрибут Format из элемента NameIDPolicy запроса SAML. |
urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress |
{SAML:Issuer} | Значение элемента Issuer SAML из запроса SAML. |
https://contoso.com |
{SAML:AllowCreate} | Значение атрибута AllowCreate из элемента NameIDPolicy запроса SAML. |
Истина |
{SAML:ForceAuthn} | Значение атрибута ForceAuthN из элемента AuthnRequest запроса SAML. |
Истина |
{SAML:ProviderName} | Значение атрибута ProviderName из элемента AuthnRequest запроса SAML. |
Contoso.com |
{SAML:RelayState} | Параметр RelayState строки запроса. |
|
{SAML:Subject} | Subject из элемента NameId запроса SAML AuthN. |
|
{SAML:Binding} | Значение атрибута ProtocolBinding из элемента AuthnRequest запроса SAML. |
urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST |
Ознакомьтесь с арбитрами утверждений с информацией о запросе авторизации SAML в живой демонстрации.
Поставщик удостоверений OAuth2
В таблице ниже приведены арбитры утверждений поставщика удостоверений OAuth2:
Утверждение | Description | Пример |
---|---|---|
{oauth2:access_token} | Маркер доступа поставщика удостоверений OAuth2. Атрибут access_token . |
eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1Ni... |
{oauth2:token_type} | Тип маркера доступа. Атрибут token_type . |
Носитель |
{oauth2:expires_in} | Срок действия маркера доступа в секундах. Атрибут expires_in . Параметр DataType для исходящего утверждения должен иметь значение int или long . |
960000 |
{oauth2:refresh_token} | Маркер обновления поставщика удостоверений OAuth2. Атрибут refresh_token . |
eyJraWQiOiJacW9pQlp2TW5pYVc2MUY... |
Чтобы использовать арбитры утверждений поставщика удостоверений OAuth2, установите арбитр утверждения в качестве значения атрибута PartnerClaimType
исходящего утверждения. В следующем примере показано, как получить утверждения внешнего поставщика удостоверений.
<ClaimsProvider>
<DisplayName>Contoso</DisplayName>
<TechnicalProfiles>
<TechnicalProfile Id="Contoso-OAUTH">
<OutputClaims>
<OutputClaim ClaimTypeReferenceId="identityProviderAccessToken" PartnerClaimType="{oauth2:access_token}" />
<OutputClaim ClaimTypeReferenceId="identityProviderAccessTokenType" PartnerClaimType="{oauth2:token_type}" />
<OutputClaim ClaimTypeReferenceId="identityProviderAccessTokenExpiresIn" PartnerClaimType="{oauth2:expires_in}" />
<OutputClaim ClaimTypeReferenceId="identityProviderRefreshToken" PartnerClaimType="{oauth2:refresh_token}" />
</OutputClaims>
...
</TechnicalProfile>
</TechnicalProfiles>
</ClaimsProvider>
Использование арбитров утверждений
Арбитры утверждений можно использовать со следующими элементами:
Товар | Элемент | Настройки |
---|---|---|
Технический профиль Application Insights | InputClaim |
|
Технический профиль Microsoft Entra | InputClaim , OutputClaim |
1, 2 |
Технический профиль OAuth2 | InputClaim , OutputClaim |
1, 2 |
Технический профиль OpenID Connect | InputClaim , OutputClaim |
1, 2 |
Технический профиль преобразования утверждений | InputClaim , OutputClaim |
1, 2 |
Технический профиль поставщика RESTful | InputClaim |
1, 2 |
Технический профиль поставщика удостоверений SAML | OutputClaim |
1, 2 |
Технический профиль для самоподтверждения | InputClaim , OutputClaim |
1, 2 |
ContentDefinition | LoadUri |
|
ContentDefinitionParameters | Parameter |
|
Технический профиль RelyingParty | OutputClaim |
2 |
Параметры:
- Метаданные
IncludeClaimResolvingInClaimsHandling
должны быть заданы наtrue
. - Для атрибута входящих или исходящих утверждений необходимо задать
AlwaysUseDefaultValue
наtrue
.
Примеры арбитров утверждений
Технический профиль RESTful
В техническом профиле REST вам может потребоваться отправить язык пользователя, имя политики, область резервирования и идентификатор клиента. На основе этих утверждений REST API может запускать пользовательскую бизнес-логику и при необходимости вызвать локализованное сообщение об ошибке.
В следующем примере показан технический профиль RESTful с этим сценарием.
<TechnicalProfile Id="REST">
<DisplayName>Validate user input data and return loyaltyNumber claim</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://your-app.azurewebsites.net/api/identity</Item>
<Item Key="AuthenticationType">None</Item>
<Item Key="SendClaimsIn">Body</Item>
<Item Key="IncludeClaimResolvingInClaimsHandling">true</Item>
</Metadata>
<InputClaims>
<InputClaim ClaimTypeReferenceId="userLanguage" DefaultValue="{Culture:LCID}" AlwaysUseDefaultValue="true" />
<InputClaim ClaimTypeReferenceId="policyName" DefaultValue="{Policy:PolicyId}" AlwaysUseDefaultValue="true" />
<InputClaim ClaimTypeReferenceId="scope" DefaultValue="{OIDC:Scope}" AlwaysUseDefaultValue="true" />
<InputClaim ClaimTypeReferenceId="clientId" DefaultValue="{OIDC:ClientId}" AlwaysUseDefaultValue="true" />
</InputClaims>
<UseTechnicalProfileForSessionManagement ReferenceId="SM-Noop" />
</TechnicalProfile>
Прямой вход в систему
С помощью арбитров утверждений вы можете настроить предварительное заполнение имени для входа или прямой вход в поставщик удостоверений в определенных социальных сетях, например Facebook или LinkedIn, или учетной записи Майкрософт. Дополнительные сведения см. в статье Настройка прямого входа в систему с помощью Azure Active Directory B2C.
Настройка динамического пользовательского интерфейса
Azure AD B2C позволяет передавать параметры строки запроса в конечные точки определения содержимого HTML, чтобы вы могли динамически отображать содержимое страницы. Например, эта функция помогает менять фоновое изображение страницы регистрации или входа в Azure AD B2C на основе пользовательского параметра, передаваемого из веб-приложения или мобильного приложения. Дополнительные сведения см. в статье Azure Active Directory B2C: настройка пользовательского интерфейса с динамическим содержимым, используя пользовательские политики. Вы также можете локализовать свою HTML-страницу на основе параметра языка или изменить содержимое на основе идентификатора клиента.
В следующем примере в строке запроса передается параметр с именем campaignId со значением Hawaii
, кодом языкаen-US
и приложением, представляющим идентификатор клиента.
<UserJourneyBehaviors>
<ContentDefinitionParameters>
<Parameter Name="campaignId">{OAUTH-KV:campaignId}</Parameter>
<Parameter Name="language">{Culture:RFC5646}</Parameter>
<Parameter Name="app">{OIDC:ClientId}</Parameter>
</ContentDefinitionParameters>
</UserJourneyBehaviors>
В результате Azure AD B2C отправляет выше перечисленные параметры на страницу содержимого HTML.
/selfAsserted.aspx?campaignId=hawaii&language=en-US&app=0239a9cc-309c-4d41-87f1-31288feb2e82
Определение содержимого
В рамках ContentDefinition LoadUri
с помощью арбитров утверждений вы можете извлекать содержимое из разных расположений, исходя из используемых параметров.
<ContentDefinition Id="api.signuporsignin">
<LoadUri>https://contoso.blob.core.windows.net/{Culture:LanguageName}/myHTML/unified.html</LoadUri>
...
</ContentDefinition>
Технический профиль Application Insights
С помощью Azure Application Insights и арбитров утверждений можно получить информацию о поведении пользователя. В техническом профиле Application Insights вы отправляете входящие утверждения, которые сохраняются в Azure Application Insights. Дополнительные сведения см. в статье Отслеживание поведения пользователей в путях взаимодействия Azure AD B2C с использованием Application Insights. Следующий пример отправляет идентификатор политики, идентификатор корреляции, язык и идентификатор клиента в Azure Application Insights.
<TechnicalProfile Id="AzureInsights-Common">
<DisplayName>Alternate Email</DisplayName>
<Protocol Name="Proprietary" Handler="Web.TPEngine.Providers.Insights.AzureApplicationInsightsProvider, Web.TPEngine, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" />
...
<InputClaims>
<InputClaim ClaimTypeReferenceId="PolicyId" PartnerClaimType="{property:Policy}" DefaultValue="{Policy:PolicyId}" />
<InputClaim ClaimTypeReferenceId="CorrelationId" PartnerClaimType="{property:CorrelationId}" DefaultValue="{Context:CorrelationId}" />
<InputClaim ClaimTypeReferenceId="language" PartnerClaimType="{property:language}" DefaultValue="{Culture:RFC5646}" />
<InputClaim ClaimTypeReferenceId="AppId" PartnerClaimType="{property:App}" DefaultValue="{OIDC:ClientId}" />
</InputClaims>
</TechnicalProfile>
Политика проверяющей стороны
В техническом профиле политики проверяющей стороны вы можете отправить идентификатор клиента или идентификатор корреляции приложению проверяющей стороны в рамках JWT.
<RelyingParty>
<DefaultUserJourney ReferenceId="SignUpOrSignIn" />
<TechnicalProfile Id="PolicyProfile">
<DisplayName>PolicyProfile</DisplayName>
<Protocol Name="OpenIdConnect" />
<OutputClaims>
<OutputClaim ClaimTypeReferenceId="displayName" />
<OutputClaim ClaimTypeReferenceId="givenName" />
<OutputClaim ClaimTypeReferenceId="surname" />
<OutputClaim ClaimTypeReferenceId="email" />
<OutputClaim ClaimTypeReferenceId="objectId" PartnerClaimType="sub"/>
<OutputClaim ClaimTypeReferenceId="identityProvider" />
<OutputClaim ClaimTypeReferenceId="tenantId" AlwaysUseDefaultValue="true" DefaultValue="{Policy:TenantObjectId}" />
<OutputClaim ClaimTypeReferenceId="correlationId" AlwaysUseDefaultValue="true" DefaultValue="{Context:CorrelationId}" />
</OutputClaims>
<SubjectNamingInfo ClaimType="sub" />
</TechnicalProfile>
</RelyingParty>
Следующие шаги
- Дополнительные примеры арбитров утверждений можно найти в репозитории сообщества Azure AD B2C в GitHub