Defina um perfil técnico OAuth2 numa Azure Ative Directory política personalizada B2C

Nota

Em Azure Ative Directory B2C, as políticas personalizadas são projetadas principalmente para abordar cenários complexos. Para a maioria dos cenários, recomendamos que utilize fluxos de utilizador incorporados. Se não o fez, aprenda sobre o pacote de iniciação de políticas personalizadas em Introdução com políticas personalizadas no Ative Directory B2C.

Azure Ative Directory B2C (Azure AD B2C) presta apoio ao fornecedor de identidade do protocolo OAuth2. OAuth2 é o protocolo primário para autorização e autenticação delegada. Para mais informações, consulte o RFC 6749 O OAuth 2.0 Authorization Framework. Com um perfil técnico OAuth2, pode federar com um fornecedor de identidade baseado em OAuth2, como o Facebook. A federação com um fornecedor de identidade permite que os utilizadores assinem com as suas identidades sociais ou empresariais existentes.

Protocolo

O atributo nome do elemento Protocolo tem de ser definido para OAuth2. Por exemplo, o protocolo para o perfil técnico Facebook-OAUTH é OAuth2:

<TechnicalProfile Id="Facebook-OAUTH">
  <DisplayName>Facebook</DisplayName>
  <Protocol Name="OAuth2" />
  ...

Reclamações de entrada

Os elementos InputClaims e InputClaimsTransformations não são necessários. Mas pode querer enviar mais parâmetros para o seu fornecedor de identidade. O exemplo seguinte adiciona o parâmetro de cadeia de consulta domain_hint com o valor do pedido de contoso.com autorização.

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

Reclamações de saída

O elemento OutputClaims contém uma lista de reclamações devolvidas pelo fornecedor de identidade OAuth2. Poderá ser necessário mapear o nome da reclamação definida na sua política para o nome definido no fornecedor de identidade. Também pode incluir reclamações que não são devolvidas pelo fornecedor de identidade desde que desemque o DefaultValue atributo.

O elemento OutputClaimsTransformations pode conter uma coleção de elementos de saídaClaimsTransformation que são utilizados para modificar as alegações de saída ou gerar novos.

O exemplo a seguir mostra as reclamações devolvidas pelo fornecedor de identidade do Facebook:

  • A first_name alegação está mapeada para a reclamação dada pelo Nome .
  • A last_name alegação está mapeada para a alegação do apelido .
  • A alegação do nome de exibição sem mapeamento de nomes.
  • A reclamação de e-mail sem mapeamento de nome.

O perfil técnico também devolve alegações que não são devolvidas pelo fornecedor de identidade:

  • A identidadeProvider afirma que contém o nome do fornecedor de identidade.
  • A autenticaçãoProvação com um valor predefinido de SocialIdpAuthentication.
<OutputClaims>
  <OutputClaim ClaimTypeReferenceId="issuerUserId" PartnerClaimType="id" />
  <OutputClaim ClaimTypeReferenceId="givenName" PartnerClaimType="first_name" />
  <OutputClaim ClaimTypeReferenceId="surname" PartnerClaimType="last_name" />
  <OutputClaim ClaimTypeReferenceId="displayName" PartnerClaimType="name" />
  <OutputClaim ClaimTypeReferenceId="email" PartnerClaimType="email" />
  <OutputClaim ClaimTypeReferenceId="identityProvider" DefaultValue="facebook.com" />
  <OutputClaim ClaimTypeReferenceId="authenticationSource" DefaultValue="socialIdpAuthentication" />
</OutputClaims>

Metadados de ponto final de autorização

O fluxo de autorização começa quando o Azure AD B2C direciona o utilizador para o ponto final dos fornecedores /authorize de identidade OAuth2. A chamada para o ponto final de autorização é a parte interativa do fluxo, onde o utilizador toma medidas. Neste momento, pede-se ao utilizador que complete a inscrição no fornecedor de identidade OAuth2. Por exemplo, introduzindo o seu nome de utilizador e senha.

O Azure AD B2C cria um pedido de autorização fornecendo ao cliente ID, âmbitos, redirecionamento URI e outros parâmetros que necessita para adquirir um token de acesso ao fornecedor de identidade. Esta secção descreve os metadados de ponto final de autorização, que permitem configurar o pedido para o /authorize ponto final do fornecedor de identidade.

O pedido para o ponto final de autorização é sempre HTTP GET. A amostra que se segue demonstra uma chamada para o ponto final da autorização.

GET https://login.contoso.com/oauth/v2/authorization?
client_id=12345
&response_type=code
&response_mode=query
&redirect_uri=urn%3Aietf%3Awg%3Aoauth%3A2.0%3Aoob
&scope=profile%20offline_access
&redirect_uri=https%3a%2f%2fabrikam.b2clogin.com%2fabrikam.onmicrosoft.com%2foauth2%2fauthresp
&state=...

A tabela que se segue lista os metadados do ponto final de autorização.

Atributo Necessário Descrição
authorization_endpoint Sim O URL do ponto final de autorização de acordo com o RFC 6749.
client_id Yes O identificador de aplicação do fornecedor de identidade.
AdditionalRequestQueryParameters No Parâmetros de consulta de pedido extra. Por exemplo, pode querer enviar parâmetros adicionais ao seu fornecedor de identidade. Pode incluir vários parâmetros usando o delimiter de vírgula.
response_mode No O método que o fornecedor de identidade utiliza para enviar o resultado de volta para Azure AD B2C. Valores possíveis: query( form_post padrão), ou fragment.
scope No O âmbito do pedido que é definido de acordo com a especificação do fornecedor de identidade OAuth2. Tais como openid, profilee email.
UsePolicyInRedirectUri No Indica se deve utilizar uma política ao construir o URI de redirecionamento. Ao configurar a sua aplicação no fornecedor de identidade, tem de especificar o URI de redirecionamento. O redirecionamento URI aponta para Azure AD B2C, https://{your-tenant-name}.b2clogin.com/{your-tenant-name}.onmicrosoft.com/oauth2/authresp. Se especificar true, tem de adicionar um URI de redirecionamento para cada apólice que utilizar. Por exemplo: https://{your-tenant-name}.b2clogin.com/{your-tenant-name}.onmicrosoft.com/{policy-name}/oauth2/authresp.

Metadados de ponta token

Após o utilizador completar a sua autenticação no ponto final de autorização do fornecedor de identidade, uma resposta contendo a autorização code é devolvida ao Azure AD B2C. A Azure AD B2C resgata o código de autorização para um token de acesso enviando um pedido DEM para o /token ponto final do fornecedor de identidade. Esta secção descreve os metadados do ponto final simbólico, que permitem configurar o pedido para o /token ponto final do fornecedor de identidade.

O seguinte pedido HTTP mostra uma chamada Azure AD B2C para o ponto final simbólico do fornecedor de identidade.

POST https://contoso/oauth2/token 
Content-Type: application/x-www-form-urlencoded

grant_type=authorization_code&client_id=12345&scope=profile offline_access&code=AwABAAAAvPM1KaPlrEqdFSBzjqfTGBCmLdgfSTLEMPGYuNHSUYBrq... 

A tabela seguinte lista os metadados do ponto final simbólico.

Atributo Necessário Descrição
AccessTokenEndpoint Sim A URL do ponto final simbólico. Por exemplo, https://www.linkedin.com/oauth/v2/accessToken.
HttpBinding No A ligação HTTP esperada ao ponto final simbólico. Valores possíveis: GET ou POST. .
AccessTokenResponseFormat No O formato da chamada de ponto final de acesso. Por exemplo, o Facebook requer um método HTTP GET, mas a resposta do token de acesso está no formato JSON. Valores possíveis: Default, Jsone JsonP.
ExtraParamsInAccessTokenEndpointResponse No Contém os parâmetros adicionais que podem ser devolvidos na resposta do AccessTokenEndpoint por alguns fornecedores de identidade. Por exemplo, a resposta do AccessTokenEndpoint contém um parâmetro extra, como openid, que é um parâmetro obrigatório para além do access_token numa cadeia de pedidos de reclamações . Vários nomes de parâmetros devem ser escapados e separados pela vírgula '', delimiter.
token_endpoint_auth_method No Especifica como a Azure AD B2C envia o cabeçalho de autenticação para o ponto final simbólico. Valores possíveis: client_secret_post (padrão) e client_secret_basic (visualização pública), private_key_jwt (visualização pública). Para mais informações, consulte a secção de autenticação de Ligação clientes OpenID.
token_signing_algorithm No Especifica o algoritmo de assinatura para utilizar quando token_endpoint_auth_method estiver definido para private_key_jwt. Valores possíveis: RS256 (padrão) ou RS512. .

Configure método de ligação HTTP

Por predefinição, o pedido para o ponto final simbólico utiliza HTTP POST.

<Item Key="AccessTokenEndpoint">https://contoso.com/oauth2/token</Item>
<Item Key="HttpBinding">POST</Item>

A seguinte chamada HTTP demonstra uma chamada para o ponto final simbólico utilizando o pedido HTTP POST:

POST /oauth2/token

client_id=abcd&client_secret=1234&redirect_uri=https%3a%2f%2fcontoso.b2clogin.com%2fcontoso.onmicrosoft.com%2foauth2%2fauthresp&code=12345&grant_type=authorization_code

Para os fornecedores de identidade que exijam a utilização do método HTTP GET no /token ponto final, desaponte os HttpBinding metadados para GET. Note-se, no exemplo seguinte, o AccessTokenResponseFormat conjunto é definido para , uma jsonvez que o ponto final token devolve a resposta em formato JSON.

<Item Key="AccessTokenEndpoint">https://contoso.com/oauth2/token</Item>
<Item Key="HttpBinding">GET</Item>
<Item Key="AccessTokenResponseFormat">json</Item>
GET /oauth2/token?client_id=abcd&client_secret=1234&redirect_uri=https%3a%2f%2fcontoso.b2clogin.com%2fcontoso.onmicrosoft.com%2foauth2%2fauthresp&code=12345&grant_type=authorization_code

Configure o formato de resposta simbólica de acesso

Para os fornecedores de identidade que suportam o método HTTP POST, o AccessTokenResponseFormat conjunto é definido por padrão para json. Se o fornecedor de identidade apoiar o pedido HTTP GET, tem de definir explicitamente o formato json de resposta ao token de acesso.

<Item Key="AccessTokenEndpoint">https://contoso.com/oauth2/token</Item>
<Item Key="HttpBinding">GET</Item>
<Item Key="AccessTokenResponseFormat">json</Item>

O exemplo a seguir demonstra uma resposta simbólica no formato JSON:

{
    "access_token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsImtpZCI6IlBFcG5...",
    "token_type": "Bearer",
    "not_before": 1637924390,
    "expires_in": 960000,
}

Configure o método de autenticação

Os pedidos para o ponto final simbólico requerem sempre autenticação. Por defeito, o Azure AD B2C fornece ao fornecedor de identidade credenciais de cliente. Por predefinição, o método de autenticação é client_secret_post, incluindo as credenciais do cliente (client_id e client_secret) no organismo de pedido.

O seguinte pedido HTTP ao ponto final simbólico contém os client_idclient_secret dados post e os dados do POST. Para pedidos client_id GET e os client_secret que estão incluídos nos parâmetros de cadeia de consulta.

POST /oauth2/token

client_id=abcd&client_secret=1234&redirect_uri=https%3a%2f%2fcontoso.b2clogin.com%2fcontoso.onmicrosoft.com%2foauth2%2fauthresp&code=12345&grant_type=authorization_code

Para os fornecedores de identidade que exijam a utilização da autenticação básica HTTP no seu /token ponto final, configuure os token_endpoint_auth_method metadados para client_secret_basic. Com este tipo de método de autenticação, as credenciais do cliente são passadas ao fornecedor de identidade utilizando o sistema de autenticação básica HTTP.

<Item Key="AccessTokenEndpoint">https://contoso.com/oauth2/token</Item>
<Item Key="token_endpoint_auth_method">client_secret_basic</Item>

O seguinte pedido HTTP demonstra uma chamada para o ponto final simbólico com autenticação básica HTTP. O cabeçalho de autorização contém o ID do cliente e o segredo do cliente, no formato client_ID:client_secret, base64 codificado.

POST /oauth2/token

Authorization: Basic YWJjZDoxMjM0

redirect_uri=https%3a%2f%2fcontoso.b2clogin.com%2fontoso.onmicrosoft.com%2foauth2%2fauthresp&code=12345&grant_type=authorization_code

Para os fornecedores de identidade que suportem a autenticação privada da chave JWT, configure os token_endpoint_auth_method metadados para private_key_jwt. Com este tipo de método de autenticação, o certificado fornecido ao Azure AD B2C é utilizado para gerar uma afirmação assinada, que é transmitida ao fornecedor de identidade através do client_assertion parâmetro. O client_assertion_type conjunto para urn:ietf:params:oauth:client-assertion-type:jwt-bearer. Os token_signing_algorithm metadados especificam o algoritmo de assinatura do token JWT.

<Item Key="AccessTokenEndpoint">https://contoso.com/oauth2/token</Item>
<Item Key="token_endpoint_auth_method">client_secret_basic</Item>
<Item Key="token_signing_algorithm">RS256</Item>

O seguinte pedido HTTP demonstra uma chamada para o ponto final simbólico utilizando a autenticação JWT da chave privada.

POST /oauth2/token

client_assertion=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiIsImtpZCI6IjJFRFg0dWRYeDIxbXNoaXdJVzczMUY3OUZSbFJiUDZXVXJyZmktR1RFeVkifQ.eyJpc3MiOiJhYmNkIiwiZXhwIjoxNjM3OTI5ODY0LCJuYmYiOjE2Mzc5Mjk1NjQsImF1ZCI6Imh0dHBzOi8vNWRlNC0xMDktNjQtMTI0LTUzLm5ncm9rLmlvL2FjY2Vzc190b2tlbiIsImp0aSI6IjVxQWlGV2lEODNDbU1KWWNrejBRdGc9PSIsInN1YiI6ImFiY2QiLCJpYXQiOjE2Mzc5Mjk1NjR9.C4OtRnrLaQatpT5LP45O5Nb418S4v8yZi_C42ld440w&client_id=abcd&client_assertion_type=urn%3aietf%3aparams%3aoauth%3aclient-assertion-type%3ajwt-bearer&redirect_uri=https%3a%2f%2fcontoso.b2clogin.com%2fcontoso.onmicrosoft.com%2foauth2%2fauthresp&code=12345&grant_type=authorization_code

Metadados de ponto final de informação do utilizador

Depois de o Azure AD B2C obter o sinal de acesso do fornecedor de identidade OAuth2, faz uma chamada para o ponto final de informação do utilizador. O ponto final de informação do utilizador, também conhecido como ponto final de reclamações, foi concebido para recuperar reclamações sobre o utilizador autenticado. O Azure AD B2C utiliza a autenticação de símbolos ao portador para autenticar no ponto final de informação do utilizador dos fornecedores de identidade. O token portador é o símbolo de acesso que a Azure AD B2C obtém do ponto final dos fornecedores /token de identidade.

O pedido ao ponto final de informação do utilizador é sempre HTTP GET. O token de acesso é enviado num parâmetro de cadeia de consulta denominado access_token. O seguinte pedido HTTP mostra uma chamada para o ponto final de informação do utilizador com o token de acesso no parâmetro de cadeia de consulta.

GET /oauth2/claims?access_token=eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsImtpZCI6IlBFcG5... 

A tabela que se segue lista os metadados do ponto final de informação do utilizador.

Atributo Necessário Descrição
ClaimsEndpoint Sim O URL do ponto final de informação do utilizador. Por exemplo, https://api.linkedin.com/v2/me.
ClaimsEndpointAccessTokenName No O nome do parâmetro de cadeia de consulta de acesso. Valor predefinido: access_token.
ClaimsEndpointFormatName No O nome do parâmetro de cadeia de consulta de formato. Por exemplo, pode definir o nome como format neste ponto final https://api.linkedin.com/v1/people/~?format=jsonde reclamações do LinkedIn .
ClaimsEndpointFormat No O valor do parâmetro de cadeia de consulta de formato. Por exemplo, pode definir o valor como json neste ponto https://api.linkedin.com/v1/people/~?format=jsonfinal de reclamações do LinkedIn .
BearerTokenTransmissionMethod No Especifica como o símbolo é enviado. O método padrão é uma cadeia de consulta. Para enviar o token como cabeçalho de pedido, definido para AuthorizationHeader.
ExtraParamsInClaimsEndpointRequest No Contém os parâmetros adicionais que podem ser devolvidos no pedido claimsEndpoint por alguns fornecedores de identidade. Vários nomes de parâmetros devem ser escapados e separados pela vírgula '', delimiter.

Configure o parâmetro de cadeia de consulta de acesso a ficha de consulta

O ponto final da informação do utilizador pode exigir que o token de acesso seja enviado num parâmetro de cadeia de consulta específico. Para alterar o nome do parâmetro de cadeia de consulta, que contém o token de acesso, utilize os ClaimsEndpointAccessTokenName metadados. No exemplo seguinte, o parâmetro de cadeia de consulta de acesso é definido para token.

<Item Key="ClaimsEndpoint">https://contoso.com/oauth2/claims</Item>
<Item Key="ClaimsEndpointAccessTokenName">token</Item>

A seguinte chamada HTTP demonstra uma chamada para o ponto final de informação do utilizador com ClaimsEndpointAccessTokenName definido para token:

GET /oauth2/claims?token=eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsImtpZCI6IlBFcG5...

Configure o formato de reclamações

O ClaimsEndpointFormatName e ClaimsEndpointFormat permitir-lhe enviar um parâmetro de cadeia de consulta de par de valor chave para o ponto final de informação do utilizador. O exemplo a seguir configura um parâmetro de cadeia de consulta denominado format, com o valor de json.

<Item Key="ClaimsEndpoint">https://contoso.com/oauth2/claims</Item>
<Item Key="ClaimsEndpointFormatName">format</Item>
<Item Key="ClaimsEndpointFormat">json</Item>

O seguinte pedido HTTP demonstra uma chamada para o ponto final de informação do utilizador com ClaimsEndpointFormatName e ClaimsEndpointFormat configurado.

GET /oauth2/claims?format=json&access_token=eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsImtpZCI6IlBFcG5...

Método de transmissão de símbolo de símbolo do portador de configuração

Por predefinição, o token de acesso é enviado para os fornecedores de identidade info ponto final através de um parâmetro de cadeia de consulta. Para enviar o token dentro do cabeçalho HTTP Authorization , desacorda BearerTokenTransmissionMethod os metadados para AuthorizationHeader.

<Item Key="ClaimsEndpoint">https://contoso.com/oauth2/claims</Item>
<Item Key="BearerTokenTransmissionMethod">AuthorizationHeader</Item>

O seguinte pedido HTTP demonstra como o token de acesso é passado quando BearerTokenTransmissionMethod é definido para AuthorizationHeader.

GET /oauth2/claims

Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsImtpZCI6IlBFcG5...

Parâmetros de passe devolvidos pelo ponto final simbólico

Alguns fornecedores de identidade requerem passar parâmetros extra que são devolvidos do ponto final simbólico para o ponto final de informação do utilizador. Por exemplo, a resposta do ponto final token contém um parâmetro denominado resource, que é um parâmetro obrigatório do ponto final de informação do utilizador (além do token de acesso). Utilize os ExtraParamsInClaimsEndpointRequest metadados para especificar quaisquer parâmetros adicionais para passar. Vários nomes de parâmetros devem ser escapados e separados pela vírgula '', delimiter.

O seguinte JSON demonstra um retorno de carga JSON pelo ponto final simbólico com um parâmetro denominado resource.

{
    "access_token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsImtpZCI6IlBFcG5...",
    "token_type": "Bearer",
    "not_before": 1549647431,
    "expires_in": 960000,
    "resource": "f2a76e08-93f2-4350-833c-965c02483b11"
}

Para passar o resource parâmetro para o ponto final da informação do utilizador, adicione os seguintes metadados:

<Item Key="ExtraParamsInClaimsEndpointRequest">resource</Item>

O seguinte pedido HTTP demonstra como o resource parâmetro é passado para o ponto final de informação do utilizador.

GET /oauth2/claims?resource=f2a76e08-93f2-4350-833c-965c02483b11&access_token=eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsImtpZCI6IlBFcG5...

Ponto final da sessão

Para assinar o utilizador fora da aplicação, redirecione o utilizador para o ponto final de assinatura Azure AD B2C (para Ligação OAuth2 e OpenID) ou envie um LogoutRequest (para SAML). O Azure AD B2C limpará a sessão do utilizador do navegador. Após um pedido de sinalização, a Azure AD B2C tenta assinar de quaisquer fornecedores de identidade federados que o utilizador possa ter assinado. O URI de assinatura do fornecedor de identidade OAuth2 está configurado nos end_session_endpoint metadados. Quando o utilizador sair da sua aplicação através do Azure AD B2C, será criado um iframe oculto que irá ligar para a página de assinatura Azure end_session_endpoint AD B2C.

A tabela que se segue lista os metadados do ponto final de informação do utilizador.

Atributo Necessário Descrição
end_session_endpoint Sim O URL do ponto final da sessão de final de sessão de acordo com RFC 6749.
SingleLogoutEnabled No Indica se durante a entrada no perfil técnico tenta-se assinar dos fornecedores de identidade federados. Para mais informações, consulte a sessão de Sessão Azure AD B2C. Valores possíveis: true (padrão), ou false.

Metadados genéricos OAuth2

A tabela que se segue lista os metadados genéricos do fornecedor de identidade OAuth2. Os metadados descrevem como o perfil técnico OAuth2 lida com a validação de fichas, obtém as alegações e reage a mensagens de erro.

Atributo Necessário Descrição
IdTokenAudience Não O público do id_token. Se especificado, a Azure AD B2C verifica se o token está numa reclamação devolvida pelo fornecedor de identidade e é igual à especificada.
ProviderName No O nome do fornecedor de identidade.
ResponseErrorCodeParamName No O nome do parâmetro que contém a mensagem de erro devolvida em HTTP 200 (Ok).
IncludeClaimResolvingInClaimsHandling   No Para pedidos de entradas e resultados, especifica se a resolução de sinistros está incluída no perfil técnico. Valores possíveis: trueou false (predefinição). Se pretender utilizar uma reclamação no perfil técnico, desa esta a definição de true.
ResolveJsonPathsInJsonTokens No Indica se o perfil técnico resolve os caminhos do JSON. Valores possíveis: trueou false (predefinição). Utilize estes metadados para ler dados a partir de um elemento JSON aninhado. Num OutputClaim, desacorda o PartnerClaimType elemento do caminho JSON que pretende obter. Por exemplo: firstName.localizedou data[0].to[0].email. .

Chaves criptográficas

O elemento CryptographicKeys contém o seguinte atributo:

Atributo Necessário Descrição
client_secret Sim O segredo do cliente da aplicação do fornecedor de identidade. A chave criptográfica só é necessária se os metadados response_types estiver definidos para code. Neste caso, o Azure AD B2C faz outra chamada para trocar o código de autorização por um token de acesso. Se os metadados estiverem definidos, id_tokenpode omitir a tecla criptográfica.
assertion_signing_key No Quando os token_endpoint_auth_method metadados estiverem definidos, private_key_jwtforneça um certificado X509 para utilizar para assinar a tecla JWT. Esta chave deve ser-lhe fornecida pelo fornecedor de identidade OAuth2.

URI de Redirecionamento

Quando configurar o URI de redirecionamento do seu fornecedor de identidade, insira https://{tenant-name}.b2clogin.com/{tenant-name}.onmicrosoft.com/oauth2/authresp. Certifique-se de substituir {tenant-name} pelo nome do seu inquilino (por exemplo, contosob2c). O URI de redirecionamento tem de estar em todas as minúsculas.

Passos seguintes