OpenID Connect

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/#/OpenID/get__application__connect__well_known_openid_configuration

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>/connect/.well-known/openid-configuration" -H "accept: application/json"

Exemplo de resposta do endpoint:

{
  "authorization_endpoint": "http://[ip ou hostname (fqdn)]/<application name>/connect/authorize",
  "end_session_endpoint": "http://[ip ou hostname (fqdn)]/<application name>/connect/end_session",
  "grant_types_supported": [
    "authorization_code"
  ],
  "id_token_signing_alg_values_supported": [],
  "issuer": "<issuer>",
  "jwks_uri": "http://[ip ou hostname (fqdn)]/<application name>/connect/jwks",
  "mtls_endpoint_aliases": {},
  "registration_endpoint": "http://[ip ou hostname (fqdn)]/<application name>/connect/dcr",
  "response_types_supported": [
    "code"
  ],
  "revocation_endpoint": "http://[ip ou hostname (fqdn)]/<application name>/connect/revoke",
  "scopes_supported": [
    "email",
    "profile"
  ],
  "tls_client_certificate_bound_access_token": true,
  "token_endpoint": "http://[ip ou hostname (fqdn)]/<application name>/connect/token",
  "token_endpoint_auth_methods_supported": [
    "client_secret_basic"
  ],
  "token_endpoint_auth_signing_alg_values_supported": [],
  "userinfo_endpoint": "http://[ip ou hostname (fqdn)]/<application name>/connect/userinfo"
}

Authorize

URL de Documentação da API : /apidocs/#/OpenID/get__application__connect_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 endpoint userinfo)
  • 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>/connect/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/#/OpenID/post__application__connect_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>/connect/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_basic as credenciais do cliente devem ser enviadas via Basic em base64

curl -X POST "https://[ip ou hostname (fqdn)]/<application name>/connect/token" -H "accept: application/json" -H "Authorization: Basic eWFMS3hD2NI[...]GWDJVMHRmWGtXMw==" -H "Content-Type: application/x-www-form-urlencoded" -d "client_id=<client_id>&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/#/OpenID/get__application__connect_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>/connect/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"
}

results matching ""

    No results matching ""