Oauth2
Pré-requisitos:
- Uma aplicação devidamente configurada.
- Usuário valido.
- Credenciais de um client valido
- JWKs configurada para geração do
access_token
Endpoint de configurações
URL de Documentação da API : /apidocs/#/OAuth2/get__application__oauth__well_known_oauth_authorization_server
O endpoint .well-know
informa ao cliente de forma dinamica quais endpoints devem ser utilizados para a integração,
não sendo nescessario uma configuração manual dos endpoints.
curl -X GET "https://[ip ou hostname (fqdn)]/<application name>/oauth/.well-known/oauth-authorization-server" -H "accept: application/json"
Exemplo de resposta do endpoint:
{
"authorization_endpoint": "https://[ip ou hostname (fqdn)]/<application name>/oauth/authorize",
"grant_types_supported": [
"authorization_code"
],
"issuer": "<issuer>",
"jwks_uri": "https://[ip ou hostname (fqdn)]/<application name>/oauth/jwks",
"mtls_endpoint_aliases": {},
"registration_endpoint": "https://[ip ou hostname (fqdn)]/<application name>/oauth/dcr",
"response_types_supported": [
"code"
],
"revocation_endpoint": "https://[ip ou hostname (fqdn)]/<application name>/oauth/revoke",
"scopes_supported": [
"email",
"profile"
],
"tls_client_certificate_bound_access_token": true,
"token_endpoint": "https://[ip ou hostname (fqdn)]/<application name>/oauth/token",
"token_endpoint_auth_methods_supported": [
"client_secret_post"
],
"token_endpoint_auth_signing_alg_values_supported": [
"RS256"
],
"userinfo_endpoint": "https://[ip ou hostname (fqdn)]/<application name>/oauth/userinfo"
}
Authorize
URL de Documentação da API : /apidocs/#/OAuth2/get__application__oauth_authorize
A chamada deve ser feita direto na barra de busca/url do navegador
Parâmetros:
- application:
- Obrigatório: Sim
- Tipo: String
- Localização: Caminho da URL (Path)
- Descrição: Nome da aplicação a ser usada.
- client_id:
- Tipo: String
- Localização: Caminho da URL (Path).
- Descrição: ID do cliente a ser usado no fluxo
- scope:
- Tipo: String
- Localização: Caminho da URL (Path).
- Descrição: Quais escopos seram adicionados no
access_token
(iram refletir também no retorno dos dados do usuario no endpointuserinfo
)
- response_type:
- Tipo: String
- Localização: Caminho da URL (Path).
- Descrição: Qual o padrão de resposta que o IDP deve responder [code, token, id_token, ...]
- redirect_uri:
- Tipo: String
- Localização: Caminho da URL (Path).
- Descrição: Qual o caminho/endpoint que o IDP deve enviar a resposta
- nonce:
- Tipo: String
- Localização: Caminho da URL (Path).
- Descrição: Preenchido somente se o parametro nonce estiver habilitado na aplicação
- code_challenge:
- Tipo: String
- Localização: Caminho da URL (Path).
- Descrição: Preenchido somente se o parametro PKCE estiver habilitado na aplicação
- code_challenge_method:
- Tipo: String
- Localização: Caminho da URL (Path).
- Descrição: Preenchido somente se o parametro PKCE estiver habilitado na aplicação
Exemplos:
- URL:
https://[ip ou hostname (fqdn)]/<application name>/oauth/authorize?client_id=<client id>&scope=<all or a spefic one>&response_type=<response type configured>&redirect_uri=<redirect uri>
Token
URL de Documentação da API : /apidocs/#/OAuth2/post__application__oauth_token
Após o login do usuario com sucesso, voce deve pegar o valor do argumento code
e
dados do client cadastrado e consumir o endpoint https://[ip ou hostname (fqdn)]/<application name>/oauth/token
Parâmetros:
- application:
- Obrigatório: Sim
- Tipo: String
- Localização: Caminho da URL (Path)
- Descrição: Nome da aplicação a ser usada.
- client_id:
- Tipo: String
- Localização: No corpo da requisição JSON.
- Descrição: ID do cliente a ser usado na geração do "code"
- client_secret:
- Tipo: String
- Localização: No corpo da requisição JSON.
- Descrição: Secret do cliente a ser usado na geração do "code"
- code:
- Tipo: String
- Localização: No corpo da requisição JSON.
- Descrição: Codigo retornado no endpoint
authorize
- grant_type:
- Tipo: String
- Localização: No corpo da requisição JSON.
- Descrição: Grant type configurado no client
- redirect_uri:
- Tipo: String
- Localização: No corpo da requisição JSON.
- Descrição: Redirect Uri enviado como parametro do endpoint de authorize
No exemplo abaixo iremos utilizar o fluxo com o grant_type
sendo authorization_code
e o response_type
como code
Como o Token Endpoint Auth Method
foi definido no exemplo como client_secret_post
as credenciais do cliente devem ser enviadas via post form
curl -X POST "https://[ip ou hostname (fqdn)]/<application name>/oauth/token" -H "accept: application/json" -H "Content-Type: application/x-www-form-urlencoded" -d "client_id=<client_id>&client_secret=<client_secret>&code=<code>&grant_type=authorization_code&redirect_uri=<redirect_uri>"
O retorno desta chamada deve ser similar ao exemplo abaixo:
{
"access_token": "eyJhbGciOiJSUz[...]EoULcOD4XZtfsTq1j95bg",
"expires_in": 3600,
"scope": "profile",
"token_type": "Bearer"
}
UserInfo
URL de Documentação da API : /apidocs/#/OAuth2/get__application__oauth_userinfo
Para recuperar as informações do usuário, utilize o access_token
retornado pelo endpoint acima como valor do
header Authorization: Bearer <access_token>
Parâmetros:
- application name:
- Obrigatório: Sim
- Tipo: String
- Localização: Caminho da URL (Path)
- Descrição: O nome da aplicação a ser usada.
Exemplos:
- Curl:
curl -X GET "https://[ip ou hostname (fqdn)]/<application name>/oauth/userinfo" -H "accept: application/json" -H "Authorization: Bearer <access_token>"
O retorno desta chamada deve ser similar ao exemplo abaixo:
{
"id": "09d97a66-da69-4049-9123-3fdd7c2c2738",
"name": "userdocs",
"sub": "09d97a66-da69-4049-9123-3fdd7c2c2738",
"username": "userdocs"
}