Usando o OpenID Connect para estender o OAuth 2.0
O OpenID Connect estende o protocolo OAuth 2.0 para adicionar uma camada simples de autenticação e identidade que fica no topo do OAuth 2.0.
Use o OpenID Connect quando quiser que seus aplicativos baseados em nuvem obtenham informações de identidade, recuperem detalhes sobre o evento de autenticação (como quando, onde e como a autenticação ocorreu) e permitam o sign-on único federado (SSO).
O OAuth 2.0 fornece tokens de segurança para uso ao chamar recursos de backend em nome de um usuário. OAuth fornece a uma concessão ou licença a capacidade de acessar recursos em vez de fornecer informações sobre a própria autenticação. Usar OAuth para autenticação é como um gerente de apartamento dando a alguém que quer saber sua identidade uma chave temporária para o seu apartamento. A chave implica apenas o direito de entrar no apartamento por um período específico de tempo. Isso não significa que o indivíduo é o proprietário.
O uso do OpenID Connect completa a imagem fornecendo aos aplicativos informações sobre o usuário, o contexto de sua autenticação e o acesso às informações de seu perfil. O OpenID Connect permite que clientes de todos os tipos, incluindo clientes baseados na web, móveis e JavaScript, solicitem e recebam informações sobre sessões autenticadas e usuários finais. Consulte OpenID Connect para obter mais informações.
Token de ID do OpenID Connect: esse token contém informações sobre a sessão autenticada do usuário.
Ponto final UserInfo: esse ponto final fornece uma maneira de o cliente recuperar atributos adicionais sobre o usuário.
Implementando o OpenID Connect
Há três ações principais necessárias para implementar o OpenID Connect:
-
Obter um Token de ID do OpenID Connect: Use um tipo de concessão OAuth2 para solicitar um Token de ID do OpenID Connect, incluindo o escopo
openidna solicitação de autorização.Os casos de uso a seguir fornecem exemplos de solicitações e respostas para obter o Token de ID.
-
Validar o Token de ID: valide o Token de ID para garantir que ele tenha sido originado de um emissor confiável e que o conteúdo não tenha sido adulterado durante o trânsito.
O caso de uso a seguir fornece informações sobre como e o que validar.
-
Recuperar informações de perfil do ponto final
UserInfo: Usando o Token de Acesso OAuth2, acesse o ponto finalUserInfopara recuperar informações de perfil sobre o usuário autenticado.O caso de uso a seguir fornece exemplos de solicitações e respostas para recuperar informações de perfil do ponto final
UserInfo.
Token de Identidade
Um Token de Identidade é um token independente e protegido pela integridade (no formato JWT (JSON Web Token) definido no padrão OpenID Connect que contém reivindicações sobre o usuário final. O Token de Identidade é a extensão principal que o OpenID Connect faz para o OAuth 2.0 para ativar a autenticação em um domínio de identidades.
O JWT do Token de Identidade consiste em três componentes, um cabeçalho, um payload e a assinatura digital. Seguindo o padrão JWT, essas três seções são codificadas e separadas por pontos em Base64URL.
As solicitações do OpenID Connect devem conter o valor do escopo
openid. O OpenID Connect 1.0 é uma camada de identidade simples no topo do protocolo OAuth 2.0. Ele permite que um aplicativo cliente do domínio de identidades do IAM (registrado como um cliente OAuth 2 com ID e segredo do cliente) verifique a identidade do usuário final com base na autenticação executada por um Servidor de Autorização (AS) e obtenha informações básicas de perfil sobre o usuário final de maneira interoperável e semelhante a REST. O OpenID Connect permite que clientes de todos os tipos, incluindo clientes baseados na web, móveis e JavaScript, solicitem e recebam informações sobre sessões autenticadas e usuários finais. Consulte OpenID Connect para obter mais informações.
| Nome | Valor |
|---|---|
amr
|
Referências a Métodos de Autenticação. Array JSON de strings que são identificadores para métodos de autenticação usados na autenticação. Por exemplo, os valores podem indicar que os métodos de autenticação de senha e OTP foram usados. |
at_hash
|
Valor de hash do Token de Acesso OAuth 2. |
aud
|
Identifica os destinatários para os quais este Token de ID se destina. Deve ser o OAuth 2.0 client_id (de acordo com a especificação do OpenID Connect). Este é o nome do cliente OAuth (app.name) que está fazendo a solicitação. Aud também contém o Emissor do domínio de identidades do IAM, transformando assim o tipo de token (IT) em uma Asserção de Usuário do domínio de identidades do IAM. |
authn_strength*
|
O valor retornado pelo SSO de Cloud indicando Força da Autenticação do Contexto AuthN. |
auth_time
|
O horário (horário da época do UNIX) em que o Cloud SSO realmente autenticou o usuário (em segundos, vindo do Contexto AuthN). |
azp
|
Parte autorizada. A parte para a qual o Token de ID foi emitido. Se presente, deve conter o OAuth 2.0 Client ID desta parte. Essa reivindicação só é necessária quando o Token de ID tem um único valor de público e esse público é diferente da parte autorizada. Pode ser incluído mesmo quando a parte autorizada é a mesma que o único público. O valor azp faz distinção entre maiúsculas e minúsculas e contém um valor StringOrURI. |
exp
|
O tempo de expiração (horário da época UNIX) no qual ou após o qual o Token de ID não deve ser aceito para processamento. Esse valor deve ser igual ao session_exp. |
iat
|
O horário (horário da época UNIX) em que o JWT foi criado (em segundos). O UNIX Epoch Time é um número JSON que representa o número de segundos de 1970-01-01T0:0:0Z, conforme medido no UTC (Coordinated Universal Time) até a data/hora. |
iss
|
O principal que emitiu o token: https://<domainURL>
|
jti
|
O identificador exclusivo gerado pelo servidor para o ID JWT. |
nonce
|
O valor da string usado para associar uma sessão do cliente a um Token de ID e para mitigar ataques de repetição. Esse valor é fornecido pelo Cloud Gate. |
session_exp*
|
O horário (horário da época do UNIX) em que a sessão SSO do Cloud expira (segundos, deve ser a mesma expiração da sessão do SSO no contexto AuthN). |
sid
|
O ID da sessão do Cloud SSO (máximo de 255 caracteres ASCII) no Contexto AuthN. |
sub
|
Identifica o usuário. O identificador do assunto é exclusivo localmente, nunca reatribuído e deve ser consumido pelo cliente: ID de Log-in do Usuário (máximo de 255 caracteres ASCII). Este é o ID de login do usuário do Contexto AuthN. |
sub_mappingattr*
|
O atributo usado para localizar a subárea no armazenamento de IDs. |
tok_type*
|
Identifica o tipo de token: IT |
user_displayname*
|
O Nome de Exibição do Usuário (máximo de 255 caracteres ASCII) do Contexto AuthN. |
user_csr*
|
Indica (verdadeiro) que o usuário é um Representante de Atendimento ao Cliente (CSR). |
user_id*
|
O GUID do domínio de identidades do IAM do usuário no Contexto AuthN. |
user_lang*
|
O idioma preferido do usuário. |
user_locale*
|
A configuração regional do usuário. |
user_tenantname*
|
O Nome do Tenant do Usuário (no máximo 255 caracteres ASCII). O GUID do locatário não foi salvo especificamente no token |
user_tz*
|
O fuso horário do usuário. |
Validação do Token de Identidade
Por que validamos tokens? Quando seu aplicativo web verifica as credenciais diretamente, ele verifica se o nome de usuário e a senha apresentados correspondem ao que você mantém. Ao usar a identidade baseada em reivindicações, você está terceirizando esse trabalho para um provedor de identidades.
A responsabilidade muda da verificação de credenciais brutas para a verificação de que o solicitante passou por seu provedor de identidades preferencial e foi autenticado com sucesso. O provedor de identidades representa a autenticação bem-sucedida emitindo um token. Antes de usar as informações ou confiar nelas como uma afirmação de que o usuário foi autenticado, você deve validá-las.
OpenID Documento de Descoberta
O protocolo OpenID Connect 1.0 é uma camada de identidade simples no topo do protocolo OAuth 2.0 que requer o uso de vários pontos finais para autenticar usuários e para solicitar recursos que incluam informações do usuário, tokens e chaves públicas. Para ajudar a descobrir quais são esses pontos finais que você precisa usar, o OpenID Connect permite que você use um documento de descoberta, que é um documento JSON encontrado em um local bem conhecido. Este documento de descoberta contém pares de chave/valor que fornecem detalhes sobre a configuração do provedor do OpenID Connect, incluindo os URIs dos pontos finais de autorização, token, informações do usuário e chaves públicas. Você pode recuperar o documento de descoberta do serviço OpenID Connect do domínio de identidades do IAM em: https://<domainURL>/.well-known/openid-configuration.
Validando Tokens de Identidade
Um Token de Identidade (ID) é um token independente e protegido pela integridade (no formato JSON Web Token) que contém reivindicações sobre o usuário final. Representa a sessão de um usuário autenticado. Portanto, o token deve ser validado para que um aplicativo possa confiar no conteúdo do Token de ID. Por exemplo, se um invasor mal-intencionado repetir o Token de ID de um usuário que ele havia capturado anteriormente, o aplicativo deverá detectar que o token foi repetido ou foi usado depois que ele expirou e negar a autenticação.
-
Verifique se o valor da reivindicação de público (
aud) contém o valorclient_iddo aplicativo. A reivindicaçãoaud(público) pode conter um array com mais de um elemento. O Token de ID deverá ser rejeitado se o token de ID não listar o cliente como um público-alvo válido ou se ele contiver públicos-alvo adicionais que não são confiáveis pelo cliente. -
Verifique se o horário atual é anterior ao horário representado pela reivindicação de tempo de expiração (
exp). -
Verifique se o Token de ID está devidamente assinado pelo emissor. Os tokens emitidos pelo domínio de identidades são assinados usando um dos certificados encontrados no URI especificado no campo
jwks_urido documento de descoberta.-
Recupere o certificado público do tenant no ponto final
SigningCert/jwk(por exemplo,https://acme.identity.oraclecloud.com/admin/v1/SigningCert/jwk).Observação
Como os domínios de identidades alteram as chaves públicas com pouca frequência, você pode armazenar em cache as chaves públicas e, na grande maioria dos casos, executar com eficiência a validação local. Isso requer recuperar e analisar certificados e fazer as chamadas de criptografia apropriadas para verificar a assinatura: -
Use qualquer biblioteca JWT disponível para validar, por exemplo, a Biblioteca JWT Nimbus do Connect2id para Java. Consulte JWT para obter uma lista de bibliotecas disponíveis.
Observação
No caso de falha na validação da assinatura, para evitar novas buscas constantes em caso de ataques com tokens falsos, a nova extração/rearmazenamento em cache da chave pública deve ser baseada em um intervalo de tempo, como 60 minutos, para que as novas buscas ocorram apenas a cada 60 minutos.
Exemplo
package sample; import java.net.MalformedURLException; import java.net.URL; import com.nimbusds.jose.JWSAlgorithm; import com.nimbusds.jose.jwk.source.JWKSource; import com.nimbusds.jose.jwk.source.RemoteJWKSet; import com.nimbusds.jose.proc.JWSKeySelector; import com.nimbusds.jose.proc.JWSVerificationKeySelector; import com.nimbusds.jose.proc.SecurityContext; import com.nimbusds.jwt.JWTClaimsSet; import com.nimbusds.jwt.proc.ConfigurableJWTProcessor; import com.nimbusds.jwt.proc.DefaultJWTProcessor; public class TokenValidation { public static void main(String[] args) { try { String tokenValue = "eyJ4NXQjUzI1....W9J4oQ"; ConfigurableJWTProcessor jwtProcessor = new DefaultJWTProcessor(); // change t JWKSource keySource = new RemoteJWKSet(new URL("https://<domainURL>/admin/v1/SigningCert/jwk")); // The expected JWS algorithm of the token (agreed out-of-band) JWSAlgorithm expectedJWSAlg = JWSAlgorithm.RS256; // Configure the JWT processor with a key selector to feed matching public // RSA keys sourced from the JWK set URL JWSKeySelector keySelector = new JWSVerificationKeySelector(expectedJWSAlg, keySource); jwtProcessor.setJWSKeySelector(keySelector); // Process the token SecurityContext ctx = null; // optional context parameter, not required here JWTClaimsSet claimsSet = jwtProcessor.process(tokenValue, ctx); // Print out the token claims set System.out.println(claimsSet.toJSONObject()); } catch (Exception e) { e.printStackTrace(); } } } -
-
Verifique se o valor da reivindicação do Identificador do Emissor (
iss) corresponde exatamente ao valor da reivindicação doiss(emissor):https://<domainURL>/
Consultando o Ponto Final UserInfo
O ponto final UserInfo do OpenID Connect é usado por um aplicativo para recuperar informações de perfil sobre a identidade autenticada. Os aplicativos podem usar esse ponto final para recuperar informações de perfil, preferências e outras informações específicas do usuário.
O perfil do OpenID Connect consiste em dois componentes:
-
Reivindicações que descrevem o usuário
-
Ponto final
UserInfoque fornece um mecanismo para recuperar essas reivindicaçõesObservação
As reivindicações do usuário também podem ser apresentadas dentro do Token de ID para eliminar um callback durante o tempo de autenticação.
Perfil do usuário - Reivindicações
O ponto final UserInfo fornece um conjunto de reivindicações com base nos escopos OAuth2 apresentados na solicitação de autenticação. O OpenID Connect define cinco valores de escopo que são mapeados para um conjunto específico de reivindicações padrão:
| Escopo do OpenID Connect | Reivindicações devolvidas |
|---|---|
|
openid |
Nenhum - Indica que esta é uma solicitação do OpenID Connect |
|
perfil |
name, family_name, given_name, middle_name, nickname, preferred_username, perfil, imagem, site, sexo, data de nascimento, informações de região, localidade, updated_at |
|
endereço |
endereço |
|
|
email, email_verified |
|
telefone |
phone_number, phone_number_verified |
O cliente precisa apresentar suas credenciais e um token de acesso. O token de acesso apresentado precisa conter o escopo openid.
Se um escopo for omitido (por exemplo, o escopo email não for usado), a reivindicação (email) não estará presente nas reivindicações retornadas.
Exemplo de Solicitação de Ponto Final UserInfo
Depois que o aplicativo cliente tiver autenticado um usuário e tiver o token de acesso, o cliente poderá fazer uma solicitação ao ponto final UserInfo para recuperar os atributos solicitados sobre um usuário. O exemplo a seguir mostra um exemplo de solicitação.
curl -i
-H 'Content-Type: application/x-www-form-urlencoded'
-H 'Authorization: Bearer eyJ4NXQjUzI1....rtApFw'-H 'Accept: */*'
-H 'Content_Language: en-US'--request GET https://<domainURL>/oauth2/v1/userinfo
Exemplo de Resposta
Uma resposta bem-sucedida retorna uma resposta HTTP 200 OK e as reivindicações do usuário no formato JSON:
{
"birthdate":"",
"email":"user@example.com",
"email_verified":false,
"family_name":"user",
"gender":"",
"given_name":"user",
"appRoles":[],
"name":"alice alice",
"preferred_username":"user@example.com",
"sub":"user@example.com",
"updated_at":1495136783,"website":""
}
Para que o aplicativo cliente possa confiar nos valores retornados do ponto final UserInfo (por exemplo, como um ataque de substituição de token de verificação), o cliente deve verificar se a reivindicação sub retornada da solicitação de ponto final UserInfo corresponde ao assunto do Token de ID.
Usando o Fluxo de Código de Autorização com o OpenID Connect
Use o fluxo Código de Autorização quando tiver clientes que possam manter com segurança um segredo de cliente entre eles e o Servidor de Autorização. O fluxo Código de Autorização retorna um Código de Autorização para o cliente, que pode então trocar o código por um Token de ID e um Token de Acesso diretamente.
Isso fornece a você o benefício de não expor nenhum token ao agente do usuário (como um navegador da Web) e possivelmente a outros aplicativos maliciosos com acesso ao agente do usuário. O Servidor de Autorização também pode autenticar o cliente antes de trocar o Código de Autorização por um Token de Acesso. O fluxo Código de autorização funciona com Clientes confidenciais e Clientes públicos.
Clientes Confidenciais
Solicite o Código de Autorização. Nesta solicitação, o valor do parâmetro de escopo é
openid.Este é um valor de especificação OpenID Connect.Exemplo de Solicitação
https://<domainURL>/oauth2/v1/authorize?client_id=<client-id>&response_type=code&redirect_uri=<client-redirect-uri>&scope=openidExemplo de Resposta
https://<domainURL>/?code=AQIDBAXv9lZQ....F9NCA=Você pode fornecer valores de escopo adicionais em suas solicitações, por exemplo:
https://<domainURL>/oauth2/v1/authorize?client_id=<client-id>&response_type=code&redirect_uri=<client-redirect-uri>&scope=phone+openid+offline_access+profile+address+emailEsta solicitação contém o escopo de recurso openid e OAuth:
https://<domainURL>/oauth2/v1/authorize?client_id=<client-id>&response_type=code&redirect_uri=<client-redirect-uri>&scope=http://<domainURL>/api+openid
Solicitar o Token. O cliente extrai o parâmetro de código da resposta e faz a solicitação de token. Além disso, o cliente fornece seu ID de cliente e segredo como parte do cabeçalho Autenticação Básica.
Exemplo de Solicitação
curl -i -H 'Authorization: Basic ZWE1OGIwNDA0N2ZkNGQ4MTgyYThiYWQ0ZTNkMGFmZjU6ZGMxNGE4MjMtZGU2OC00YWNhLTg1OWUtMWNhZTJmNjQ0NTBi' -H 'Accept: */*' --request POST 'https://<domainURL>/oauth2/v1/token' -d 'grant_type=authorization_code&code=AQIDBAXv9lZQ???.jF9NCA'Exemplo de Resposta
A solicitação contém o Token de Acesso e o Token de ID.
{ "access_token":"eyJ4NXQjUzI1???.xhtnbw", "token_type":"Bearer", "expires_in":27261, "id_token":"eyJ4NXQjUzI1???.._XLqUw" }
Clientes Públicos
Os clientes públicos não têm credenciais, mas têm um identificador de cliente. Há duas etapas no fluxo do Código de Autorização. As solicitações envolvem uma solicitação GET baseada em browser e, em seguida, uma solicitação POST de canal traseiro para obter o Token de Acesso.
-
Solicite o Código de Autorização.
Exemplo de Solicitação
GET https://<domainURL>/oauth2/v1/authorize?client_id=<client-id>&response_type=code&redirect_uri=<client-redirect-uri>&scope=openid&nonce=<nonce-value>&state=1234Exemplo de Resposta
Observação
Esses exemplos de solicitação e resposta são semelhantes aos da solicitação do Cliente Confidencial e às respostas discutidas anteriormente.https://<domainURL>/?code=AQIDBAXv9lZQ....F9NCA= -
Solicitar o Token.
Exemplo de Solicitação
Observação
Essa solicitação é diferente da solicitação do Cliente Confidencial em que o id do cliente e o segredo do cliente são especificados no cabeçalho Autenticação Básica. No fluxo de cliente público, não há cabeçalho de Autenticação Básica. O id do cliente é especificado como parte do payload da solicitação.curl -i -H 'Content-Type: application/x-www-form-urlencoded;charset=UTF-8' --request POST https://<domainURL>/oauth2/v1/token -d 'grant_type=authorization_code&code=<authz-code>&reidrect_uri=<client-redirect-uri>&client_id=<client-id>'Exemplo de Resposta
{ "access_token":"eyJ4NXQjUzI1???.xhtnbw", "token_type":"Bearer", "expires_in":27261, "id_token":"eyJ4NXQjUzI1???.._XLqUw" }
Usando o Fluxo Implícito com o OpenID Connect
Use o fluxo Implícito quando tiver implementado um cliente baseado em browser usando uma linguagem de script, como JavaScript. O Token de Acesso e o Token de ID são retornados diretamente ao Cliente, o que pode expor esses tokens ao usuário e aos aplicativos que têm acesso ao agente de usuário do usuário (como um navegador da Web).
Authorization e o ponto final token não é usado. O fluxo implícito funciona com clientes confidenciais, confiáveis e públicos.Os clientes públicos não têm credenciais, apenas um identificador de cliente.
Há suporte para os seguintes valores response_type com o fluxo Implícito:
-
id_token(Token de ID) -
token(Token de acesso) -
id_token token(Token de ID e Token de Acesso)
Obtendo um Token de ID
Solicitar o token.
Exemplo de Solicitação
https://<domainURL>/oauth2/v1/authorize?client_id=<client_id>&response_type=id_token&redirect_uri=<client_redirect_uri>&scope=address+openid+profile&nonce=abcdefgO usuário faz login e dá consentimento (com base nos escopos solicitados)
Resposta com Token de ID
Exemplo de Resposta
Observação
Todos os parâmetros de resposta são adicionados ao componente de fragmento do URI de redirecionamento.https://<domainURL>/#id_token=eyJ4NXQjUzI1.....gF5uyQ
Obtendo um Token de Acesso
Há três etapas no fluxo Implícito para obter um Token de Acesso:
-
Solicitar o Token de Acesso.
Exemplo de Solicitação
https://<domainURL>/oauth2/v1/authorize?client_id=<client_id>&response_type=token&redirect_uri=<client_redirect_uri>&scope=address+openid+profile -
O usuário faz login e dá consentimento (com base nos escopos solicitados).
-
Resposta com Token de Acesso
Exemplo de Resposta
Observação
Todos os parâmetros de resposta são adicionados ao componente de fragmento do URI de redirecionamento.https://<domainURL>/#access_token=eyJ4NXQjUzI1...4WGvJQ&token_type=Bearer&expires_in=3600
Obtendo um Token de ID e um Token de Acesso
Solicite o Token de ID e o Token de Acesso.
Exemplo de Solicitaçãohttps://<domainURL>/oauth2/v1/authorize?client_id=<client_id>&response_type=id_token token&redirect_uri=<client_redirect_uri>&scope=address+openid+profile&nonce=abcdefghijklO usuário faz login e dá consentimento (com base nos escopos solicitados).
Resposta com Token de Acesso e Token de ID.
Exemplo de RespostaObservação
Todos os parâmetros de resposta são adicionados ao componente de fragmento do URI de redirecionamento.https://<domainURL>/#access_token=eyJ4NXQjUzI....XWGmeQ&id_token=eyJ4NXQjUzI1....&token_type=Bearer&expires_in=3600
Usando o Fluxo Híbrido com o OpenID Connect
Use o fluxo Híbrido quando quiser obter tokens separadamente do canal frontal e do canal traseiro. Por exemplo, você tem um componente do browser como JavaScript e um componente do servidor de backend como Node.js. O componente do navegador obtém o Código de Autorização e o Token de ID e pode personalizar o conteúdo da IU. O componente de backend obtém o Token de Acesso para executar chamadas de API de negócios.
Os clientes precisam oferecer suporte a solicitações e respostas baseadas em navegador e a solicitações e respostas programáticas/de back-channel para usar o fluxo Híbrido. O fluxo Híbrido funciona com Clientes Confidenciais e Clientes Públicos. Os seguintes valores response_type são suportados com o fluxo Híbrido:
-
code id_token(Token de ID) -
code token(Token de Acesso) -
code id_token token(Código de Autorização, Token de ID e Token de Acesso)
Obtendo um Token de ID
Solicite o Código de Autorização e o Token de ID.
Exemplo de Solicitação
https://<domainURL>/oauth2/v1/authorize?client_id=<client_id>&response_type=code id_token&redirect_uri=<client_redirect_uri>&scope=http://<domainURL>/test+openid+offline_access&nonce=abcdefghijkO usuário faz login e dá consentimento (com base nos escopos solicitados).
Resposta com Token de ID e Código de Autorização.
Exemplo de Resposta
Observação
Todos os parâmetros de resposta são adicionados ao componente de fragmento do URI de redirecionamento.https://<domainURL>/#code=AQIDBAUrAi0l....F9NCA=&id_token=eyJ4NXQjUzI1....3R8b_QO aplicativo cliente faz uso do Código de Autorização e faz uma solicitação de canal de retorno para obter um novo Token de Acesso e Tokens de Atualização.
Exemplo de Solicitação
curl -i -H 'Authorization: Basic YjA3NTZkNDc5M2QwNDZjNjhjZWVmY2UxZjE4ZGUwMWM6NGYzZjJjN2EtZTBjZC00NzcyLWE5MTYtNjI3ZmExNzA2NWE5' -H 'Accept: */*' --request POST 'https://<domainURL>/oauth2/v1/token' -d 'grant_type=authorization_code&code=AQIDBAUrAi0l???.CA%3D'Exemplo de Resposta
{ "access_token":"eyJ4NXQjUzI1....sJ5mCw", "token_type":"Bearer", "expires_in":3600, "refresh_token":"AQIDBAUwxxoC....tZLvA" }
Obtendo um Token de Acesso
Há quatro etapas no fluxo Híbrido para obter o Código de Autorização e o Token de Acesso:
-
Solicite o Código de Autorização e o Token de Acesso.
Exemplo de Solicitação
https://<domainURL>/oauth2/v1/authorize?client_id=<client_id>&response_type=code token&redirect_uri=<client_redirect_uri>&scope=http://<domainURL>/test -
O usuário faz login e dá consentimento (com base nos escopos solicitados).
-
Resposta com Token de ID e Código de Autorização.
Exemplo de Resposta
Observação
Todos os parâmetros de resposta são adicionados ao componente de fragmento do URI de redirecionamento.https://<domainURL>/#access_token=eyJ4NXQjUzI1....Pudw9A&code=AQIDBAU6d6Ae....F9NCA=&token_type=Bearer&expires_in=3600 -
O aplicativo cliente faz uso do Código de Autorização e faz uma solicitação de canal de retorno para obter um novo Token de Acesso.
Exemplo de Solicitaçãocurl -i -H 'Authorization: Basic YjA3NTZkNDc5M2QwNDZjNjhjZWVmY2UxZjE4ZGUwMWM6NGYzZjJjN2EtZTBjZC00NzcyLWE5MTYtNjI3ZmExNzA2NWE5' -H 'Accept: */*'' --request POST 'https://<domainURL>/oauth2/v1/token' -d 'grant_type=authorization_code&code=AQIDBAU6d6Ae...NCA%3D'Exemplo de Resposta
{ "access_token":"eyJ4NXQjUzI1....Tgs9LA", "token_type":"Bearer", "expires_in":3600 }
Obtendo um Token de ID e um Token de Acesso
Solicite o Código de Autorização e o Token de ID.
Exemplo de Solicitaçãohttps://<domainURL>/oauth2/v1/authorize?client_id=client_id&response_type=cod id_token token&redirect_uri=client_redirect_uri&scope=http://<domainURL>/test+openid&nonce=abcdaerO usuário faz login e dá consentimento (com base nos escopos solicitados).
Resposta com Token de ID e Token de Acesso.
Exemplo de RespostaObservação
Todos os parâmetros de resposta são adicionados ao componente de fragmento do URI de redirecionamento.https://<domainURL>/#access_token=eyJ4NXQjUzI1....sDB7lA&code=AQIDBAVxZzy-....F9NCA=&id_token=eyJ4NXQjUzI1....&token_type=Bearer&expires_in=36004O aplicativo cliente faz uso do Código de Autorização e faz uma solicitação de canal de retorno para obter um novo Token de Acesso.
Exemplo de Solicitaçãocurl -i -H 'Authorization: Basic YjA3NTZkNDc5M2QwNDZjNjhjZWVmY2UxZjE4ZGUwMWM6NGYzZjJjN2EtZTBjZC00NzcyLWE5MTYtNjI3ZmExNzA2NWE5' -H 'Accept: */*' ?request POST 'https://<domainURL>/oauth2/v1/token' -d 'grant_type=authorization_code&code=AQIDBAXUbLmS???.NCA%3D'Exemplo de Resposta
{ "access_token":"eyJ4NXQjUzI1....g52XmQ", "token_type":"Bearer", "expires_in":3600, "id_token":"eyJ4NXQjUzI1....f6JfWA" }
Usando o OpenID Connect para Logout
Você pode usar o OpenID Connect para solicitações de logout baseadas em browser.
Há duas maneiras de solicitar um logout usando o OpenID Connect:
-
Redirecione para o cliente que iniciou o logout.
Observação
Certifique-se de definir o URI de redirecionamento pós-log-out para o aplicativo Cliente OAuth e de que o Token de ID seja enviado na solicitação. O Token de ID contém o ID do cliente. O URL de pós-logout correspondente do ID do cliente é extraído e validado.Exemplo de Solicitação
https://<domainURL>/oauth2/v1/userlogout?post_logout_redirect_uri=http://clienthost:port/myapp/return&state=c3004d28&id_token_hint=<IDToken> -
Use a landing page do inquilino.
Observação
Isso usa a página de destino do tenant que foi definida nas configurações de SSO do tenant.Exemplo de Solicitação
https://<domainURL>/oauth2/v1/userlogout