Бөлісу құралы:


Арбитры утверждений в пользовательских политиках 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 строки запроса. 00000000-0000-0000-0000-000000000000
{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

Параметры:

  1. Метаданные IncludeClaimResolvingInClaimsHandling должны быть заданы на true.
  2. Для атрибута входящих или исходящих утверждений необходимо задать 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>

Следующие шаги