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 na 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 (SSO) federado.
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 autenticação em si. Usar OAuth para autenticação é como um gerente de apartamento dando a alguém que quer saber sua identidade uma chave temporária para 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 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
openid
na 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 se 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 finalUserInfo
para 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 autossuficiente seguro de integridade (no formato JWT (JSON Web Token) definido no padrão do 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 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 em Base64URL e separadas por pontos.
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 serviço IAM (registrado como um cliente OAuth 2 com ID do cliente 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 do perfil sobre o usuário final de maneira interoperável, 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 de 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 aos 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 serviço IAM, transformando assim o tipo de token (TI) em uma Asserção do Usuário do domínio de identidades do serviço IAM. |
authn_strength*
|
O valor retornado pelo SSO na Nuvem indicando a Força de Autenticação do Contexto AuthN. |
auth_time
|
O horário (tempo de época do UNIX) em que o Cloud SSO realmente autenticou o usuário (em segundos, proveniente do Contexto AuthN). |
azp
|
Parte autorizada. A parte para a qual o Token de ID foi emitido. Se presente, ele DEVE conter o ID do Cliente OAuth 2.0 desta parte. Essa reivindicação só é necessária quando o Token de ID tem um único valor de público-alvo e esse público-alvo é diferente da parte autorizada. Pode ser incluído mesmo quando a parte autorizada é a mesma que o público único. O valor azp é uma string que faz distinção entre maiúsculas e minúsculas que contém um valor StringOrURI. |
exp
|
O tempo de expiração (horário da época UNIX) no ou após o qual o Token de ID não deve ser aceito para processamento. Este valor deve ser o mesmo que session_exp. |
iat
|
O tempo (horário da época UNIX) em que o JWT foi criado (em segundos). UNIX Epoch Time é um número JSON que representa o número de segundos de 1970-01-01T0:0:0Z medido no Tempo Universal Coordenado (UTC) 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 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 do Cloud SSO 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) do Contexto AuthN. |
sub
|
Identifica o usuário. O identificador de assunto é localmente exclusivo, nunca reatribuído e destina-se a ser consumido pelo cliente: ID de login do usuário (máximo de 255 caracteres ASCII). Este é o ID de logon do usuário no Contexto AuthN. |
sub_mappingattr*
|
O atributo usado para localizar o sub no armazenamento de IDs. |
tok_type*
|
Identifica o tipo de token: IT |
user_displayname*
|
O Nome para 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 serviço IAM do usuário no Contexto AuthN. |
user_lang*
|
O idioma preferencial do usuário. |
user_locale*
|
A configuração regional do usuário. |
user_tenantname*
|
O Nome do Tenant do Usuário (máximo de 255 caracteres ASCII). O GUID do tenant não é salvo especificamente no token |
user_tz*
|
O fuso horário do usuário. |
Validação de 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 verificar se o solicitante passou pelo provedor de identidades preferido e foi autenticado com sucesso. O provedor de identidades representa uma autenticação bem-sucedida emitindo um token. Antes de usar as informações ou confiar nelas como uma asserção que o usuário autenticou, 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 incluem 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 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 serviço IAM em: https://<domainURL>/.well-known/openid-configuration.
Validando Tokens de Identidade
Um Token de Identidade (ID) é um token independente e protegido por 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 reproduzir o Token de ID de um usuário capturado anteriormente, o aplicativo deverá detectar que o token foi reproduzido ou foi usado após a expiração e negar a autenticação.
-
Verifique se o valor da reivindicação de público-alvo (
aud
) contém o valorclient_id
do aplicativo. A reivindicaçãoaud
(público-alvo) 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 contiver públicos-alvo adicionais não confiáveis pelo cliente. -
Verifique se a hora atual é anterior à hora representada pela reivindicação de tempo de expiração (
exp
). -
Verifique se o Token de ID está assinado corretamente pelo emissor. Os tokens emitidos do domínio de identidades são assinados usando um dos certificados encontrados no URI especificado no campo
jwks_uri
do 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 as chaves públicas em cache 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
Em caso de falha de validação de assinatura, para evitar reajustes constantes em caso de ataques com tokens falsos, o reajuste/rearmazenamento em cache da chave pública deve ser baseado em um intervalo de tempo, como 60 minutos, para que as reajustes só ocorram 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çãoiss
(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
UserInfo
fornecendo 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.
Reivindicações do perfil do usuário
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 mapeiam para um conjunto específico de reivindicações padrão:
Escopo do OpenID Connect | Pedidos de indenização devolvidos |
---|---|
openid |
Nenhum - Indica que esta é uma solicitação do OpenID Connect |
perfil |
nome, family_name, given_name, middle_name, apelido, preferred_username, perfil, foto, site, sexo, data de nascimento, zoneinfo, configuração regional, 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 de Amostra
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 OK HTTP 200 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 uma verificação de ataque de substituição de token), 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 ao cliente, que pode então trocar o código por um Token de ID e um Token de Acesso diretamente.
Isso oferece a você o benefício de não expor nenhum token ao agente do usuário (como um navegador da Web) e possivelmente 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 tanto com Clientes Confidenciais quanto com 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 do OpenID Connect.Exemplo de Solicitação
https://<domainURL>/oauth2/v1/authorize?client_id=<client-id>&response_type=code&redirect_uri=<client-redirect-uri>&scope=openid
Exemplo 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+email
Esta 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
Solicite 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 e segredo como parte do cabeçalho de 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; em vez disso, eles têm um identificador de cliente. Há duas etapas no fluxo Código de autorização. As solicitações envolvem uma solicitação GET baseada em navegador e, em seguida, uma solicitação POST de canal de retorno 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=1234
Exemplo de Resposta
Observação
Esses exemplos de solicitação e resposta são semelhantes à solicitação do Cliente Confidencial e às respostas discutidas anteriormente.https://<domainURL>/?code=AQIDBAXv9lZQ....F9NCA=
-
Solicite o Token.
Exemplo de Solicitação
Observação
Esta solicitação é diferente da solicitação do Cliente Confidencial na qual o id do cliente e o segredo do cliente são especificados no cabeçalho Autenticação Básica. No fluxo do 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.
Os seguintes valores response_type
são suportados com o fluxo Implícito:
-
id_token
(Token de ID) -
token
( Token de Acesso) -
id_token token
(o Token de ID e o Token de Acesso)
Obtendo um Token de ID
Solicite 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=abcdefg
O usuário efetua log-in 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:
-
Solicite 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 efetua log-in 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=abcdefghijkl
O usuário efetua log-in 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 interface do usuário. O componente de backend obtém o Token de Acesso para executar chamadas de API de negócios.
Os clientes precisam suportar solicitações e respostas baseadas em navegador e solicitações e respostas programáticas/de canal traseiro 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=abcdefghijk
O usuário efetua log-in 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_Q
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 e Atualizar Tokens.
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 efetua log-in 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=abcdaer
O usuário efetua log-in 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=36004
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=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 Log-out
Você pode usar o OpenID Connect para solicitações de logout baseadas em navegador.
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-logout 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-log-out correspondente desse id de 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 página de destino do inquilino.
Observação
Isso usa a página de destino do tenant que foi definida nas definições de SSO do tenant.Exemplo de Solicitação
https://<domainURL>/oauth2/v1/userlogout