Defina um perfil técnico OpenId Connect em uma política personalizada do Azure Active Directory B2C

Observação

No Azure Active Directory B2C, as políticas personalizadas são projetadas principalmente para tratar de cenários complexos. Para a maioria dos cenários, recomendamos que você use fluxos de usuários predefinidos. Se você ainda não fez isso, saiba mais sobre o pacote de início de política personalizado em Introdução às políticas personalizadas no Active Directory B2C.

O Azure Active Directory B2C (Azure AD B2C) é compatível com o provedor de identidade do protocolo OpenID Connect. O OpenID Connect 1.0 define uma camada de identidade com base em OAuth 2.0 e representa a estado de última geração em protocolos de autenticação modernos. Com o perfil técnico do OpenID Connect, você pode federar com um provedor de identidade baseado no OpenID Connect, como o Azure AD. A Federação com um provedor de identidade permite que os usuários entrem com identidades sociais ou empresariais existentes.

Protocolo

O atributo Name do elemento Protocol precisa ser definido como OpenIdConnect. Por exemplo, o protocolo para o perfil técnico MSA-OIDC é OpenIdConnect:

<TechnicalProfile Id="MSA-OIDC">
  <DisplayName>Microsoft Account</DisplayName>
  <Protocol Name="OpenIdConnect" />
  ...

Declarações de entrada

Os elementos InputClaims e InputClaimsTransformations não são necessários. Mas talvez você queira enviar parâmetros adicionais para seu provedor de identidade. O exemplo a seguir adiciona o parâmetro de cadeia de caracteres de consulta domain_hint com o valor de contoso.com à solicitação de autorização.

<InputClaims>
  <InputClaim ClaimTypeReferenceId="domain_hint" DefaultValue="contoso.com" />
</InputClaims>

Declarações de saída

O elemento OutputClaims contém uma lista de declarações retornadas pelo provedor de identidade OpenID Connect. Talvez seja necessário mapear o nome da declaração definida em sua política para o nome definido no provedor de identidade. Você também pode incluir declarações que não são retornadas pelo provedor de identidade, desde que defina o atributo DefaultValue.

O elemento OutputClaimsTransformations pode conter uma coleção de elementos OutputClaimsTransformation usados para modificar as declarações de saída ou gerar novas declarações.

O exemplo a seguir mostra as declarações retornadas pelo provedor de identidade de Conta Microsoft:

  • A declaração sub que é mapeada para a declaração issuerUserId.
  • A declaração name que é mapeada para a declaração displayName.
  • O email sem mapeamento de nome.

O perfil técnico também retorna declarações que não são retornadas pelo provedor de identidade:

  • A declaração identityProvider que contém o nome do provedor de identidade.
  • A declaração authenticationSource com um valor padrão de socialIdpAuthentication.
<OutputClaims>
  <OutputClaim ClaimTypeReferenceId="identityProvider" DefaultValue="live.com" />
  <OutputClaim ClaimTypeReferenceId="authenticationSource" DefaultValue="socialIdpAuthentication" />
  <OutputClaim ClaimTypeReferenceId="issuerUserId" PartnerClaimType="sub" />
  <OutputClaim ClaimTypeReferenceId="displayName" PartnerClaimType="name" />
  <OutputClaim ClaimTypeReferenceId="email" />
</OutputClaims>

Metadados

Atributo Obrigatório Descrição
client_id Sim O identificador do aplicativo do provedor de identidade.
IdTokenAudience Não O público-alvo do id_token. Se for especificado, o Azure AD B2C verificará se a declaração aud em um token retornado pelo provedor de identidade é igual àquela especificada nos metadados do IdTokenAudience.
METADATA Sim Uma URL que aponta para um documento de configuração do provedor de identidade do OpenID Connect, que também é conhecido como ponto de extremidade de configuração bem conhecido do OpenID. A URL pode conter a expressão {tenant}, que é substituída pelo nome do locatário.
authorization_endpoint Não Uma URL que aponta para um ponto de extremidade da autorização de configuração do provedor de identidade do OpenID Connect. O valor dos metadados de authorization_endpoint tem precedência sobre o authorization_endpoint especificado no ponto de extremidade de configuração bem conhecido do OpenID. A URL pode conter a expressão {tenant}, que é substituída pelo nome do locatário.
end_session_endpoint Não O URL do ponto de extremidade da sessão. O valor dos metadados do end_session_endpoint tem precedência sobre o end_session_endpoint especificado no ponto de extremidade de configuração conhecido do OpenID.
emissor Não O identificador exclusivo de um provedor de identidade do OpenID Connect. O valor dos metadados do emissor tem precedência sobre o issuer especificado no ponto de extremidade de configuração bem conhecido do OpenID. Se for especificado, o Azure AD B2C verificará se a declaração iss em um token retornado pelo provedor de identidade é igual àquela especificada nos metadados do emissor.
ProviderName Não O nome do provedor de identidade.
response_types Não O tipo de resposta de acordo com a especificação do OpenID Connect Core 1.0. Valores possíveis: id_token, code ou token.
response_mode Não O método que o provedor de identidade usa para enviar o resultado de volta ao Azure AD B2C. Valores possíveis: query, form_post (padrão) ou fragment.
scope Não O escopo da solicitação definida de acordo com a especificação do OpenID Connect Core 1.0. Como openid, profile e email.
HttpBinding Não A associação HTTP esperada para o token de acesso e pontos de extremidade do token de declarações. Valores possíveis: GET ou POST.
ValidTokenIssuerPrefixes Não Uma chave que pode ser usada para entrar em cada um dos locatários ao usando um provedor de identidade multilocatário como o Azure Active Directory.
UsePolicyInRedirectUri Não Indica se deve ser usada uma política ao criar o URI de redirecionamento. Quando você configura seu aplicativo no provedor de identidade, precisa especificar o URI de redirecionamento. Os pontos de URI de redirecionamento para o Azure AD B2C, https://{your-tenant-name}.b2clogin.com/{your-tenant-name}.onmicrosoft.com/oauth2/authresp. Se você especificar true, precisará adicionar um URI de redirecionamento a cada política que você usar. Por exemplo: https://{your-tenant-name}.b2clogin.com/{your-tenant-name}.onmicrosoft.com/{policy-name}/oauth2/authresp.
MarkAsFailureOnStatusCode5xx Não Indica se uma solicitação para um serviço externo deverá ser marcada como uma falha se o código de status Http estiver no intervalo 5xx. O padrão é false.
DiscoverMetadataByTokenIssuer Não Indica se os metadados OIDC devem ser descobertos usando o emissor no token JWT. Se você precisar criar a URL do ponto de extremidade de metadados com base no emissor, defina-o como true.
IncludeClaimResolvingInClaimsHandling Não Em declarações de entrada e saída, especifica se a resolução de declarações está incluída no perfil técnico. Valores possíveis: true ou false (padrão). Se você quiser usar um resolvedor de declarações no perfil técnico, defina como true.
token_endpoint_auth_method Não Especifica como Azure AD B2C envia o cabeçalho de autenticação para o ponto de extremidade do token. Valores possíveis: client_secret_post (padrão) e client_secret_basic (versão prévia pública), private_key_jwt (versão prévia pública). Para obter mais informações, confira a seção autenticação de cliente do OpenID Connect.
token_signing_algorithm Não Especifica o algoritmo de assinatura a ser usado quando token_endpoint_auth_method é definido como private_key_jwt. Valores possíveis: RS256 (padrão) ou RS512.
SingleLogoutEnabled Não Indica se, durante a entrada, o perfil técnico tenta sair de provedores de identidade federada. Para obter mais informações, consulte Saída da sessão do Azure AD B2C. Valores possíveis: true (padrão) ou false.
ReadBodyClaimsOnIdpRedirect Não Defina como true para ler declarações do corpo da resposta no redirecionamento do provedor de identidade. Esses metadados são usados com o Apple ID, em que as declarações retornam no payload de resposta.
<Metadata>
  <Item Key="ProviderName">https://login.live.com</Item>
  <Item Key="METADATA">https://login.live.com/.well-known/openid-configuration</Item>
  <Item Key="response_types">code</Item>
  <Item Key="response_mode">form_post</Item>
  <Item Key="scope">openid profile email</Item>
  <Item Key="HttpBinding">POST</Item>
  <Item Key="UsePolicyInRedirectUri">false</Item>
  <Item Key="client_id">Your Microsoft application client ID</Item>
</Metadata>

Elementos da interface do usuário

As configurações a seguir podem ser usadas para configurar a mensagem de erro exibida após a falha. Os metadados devem ser configurados no perfil técnico do OpenID Connect. A mensagem de erro pode ser localizada.

Atributo Obrigatório Descrição
UserMessageIfClaimsPrincipalDoesNotExist Não A mensagem a exibir ao usuário se uma conta com o nome de usuário informado não for encontrada no diretório.
UserMessageIfInvalidPassword Não A mensagem a exibir ao usuário se a senha estiver incorreta.
UserMessageIfOldPasswordUsed Não A mensagem a exibir ao usuário se uma senha antiga for usada.

Chaves criptográficas

O elemento CryptographicKeys contém o seguinte atributo:

Atributo Obrigatório Descrição
client_secret Sim O segredo do cliente do aplicativo do provedor de identidade. Essa chave de criptografia será necessária somente se os metadados response_types estiverem definidos como code e token_endpoint_auth_method como client_secret_post ou client_secret_basic. Nesse caso, o Azure AD B2C faz outra chamada para trocar o código de autorização para um token de acesso. Se os metadados forem definidos como id_token, você poderá omitir a chave de criptografia.
assertion_signing_key Sim A chave privada RSA que será usada para assinar a instrução de declaração do cliente. Essa chave de criptografia será necessária somente se os metadados token_endpoint_auth_method forem configurados como private_key_jwt.

URI de redirecionamento

Ao configurar o URI de redirecionamento do seu provedor de identidade, insira https://{your-tenant-name}.b2clogin.com/{your-tenant-name}.onmicrosoft.com/oauth2/authresp. Não se esqueça de substituir {your-tenant-name} pelo nome do locatário. O URI de redirecionamento deve ser todo em letras minúsculas.

Exemplos: