TLS Client Auth
Pré-requisitos:
- Configurações básicas
- Verificar se o método de autenticação é valido
- Valor "code" retornado pelo endpoint authorize
- Server configurado para conexões HTTPS
- Certificado do cliente assinado por uma CA
- Aplicação configurada para mTLS
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:
- Obrigatório: Sim
- Tipo: String
- Localização: No corpo da requisição JSON
- Descrição: ID do cliente a ser usado na geração do "code"
- code:
- Obrigatório: Sim
- Tipo: String
- Localização: No corpo da requisição JSON.
- Descrição: Codigo retornado no endpoint
authorize
- grant_type:
- Obrigatório: Sim
- Tipo: String
- Localização: No corpo da requisição JSON.
- Descrição: Grant type configurado no client
- redirect_uri:
- Obrigatório: Sim
- Tipo: String
- Localização: No corpo da requisição JSON.
- Descrição: Redirect uri enviado como parâmetro do endpoint
authorize
- key:
- Obrigatório: Sim
- Tipo: String
- Localização: Header da requisição.
- Descrição: Chave vinculada ao certificado do client assinado por um CA
- cert:
- Obrigatório: Sim
- Tipo: String
- Localização: Header da requisição.
- Descrição: Certificado do client assinado por um CA
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 tls_client_auth
a autenticação é realizada passando o par chave/certificado no header da requisição
Observação: espera-se que todos os pré-requisitos tenham sido satisfeitos, e que o certificado do client esteja assinado pelo root CA e intermediate CA
SAN Field
- Não se esqueça de configurar no client um SAN field (Subject Alternative Name) para validar o certificado. No exemplo, iremos usar o email que foi registrado na criação do certificado.
- Para extrair SAN fields do certificado basta rodar o seguinte comando:
openssl x509 -noout -text -in client.cert.pem
Exemplo de uma requisição usando
tls_client_auth
para autenticaçãocurl -X POST "https://[ip ou hostname (fqdn)]/<application name>/oauth/token" \ -H "accept: application/json" \ -H "Content-Type": application/x-www-form-urlencoded \ --cert $CERT \ --key $KEY \ -d grant_type=authorization_code \ -d client_id=<client_id> \ -d code=<auth_code> \ -d 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" }