Self Signed TLS Client Auth

Pré-requisitos:

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 autoassinado registrado no JWK do client
  • cert:
    • Obrigatório: Sim
    • Tipo: String
    • Localização: Header da requisição.
    • Descrição: Certificado autoassinado registrado no client através do JWK

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 self_signed_tls_client_auth a autenticação é realizada passando o par chave/certificado no header da requisição

  • Gerando e registrando um certificado autoassinado

    1. Gerando o certificado
      openssl req -x509 -newkey rsa:2048 -keyout client_key.pem -out client.pem -sha256 -days 365
      
    2. Gerando JWK (Json Web Key)

      • Extraia a chave pública do certificado
        openssl pkey -pubout -in client_key.pem > client_public_key.pem
        
      • Para gerar o JWK utilizaremos o seguinte site: https://irrte.ch/jwt-js-decode/pem2jwk.html jwk gerado a partir da chave publica

        • Após o site gerar o jwk, copie e armazene-o em um arquivo

          touch client.jwk
          
          #cole o jwk gerado pelo site
          sudo vi client.jwk
          
        • Por fim, incluímos o certificado no JWK através do parâmetro x5c
          CERT=$(sed /-/d client.pem | tr -d \\n)
          jq ".+{\"x5c\":[\"$CERT\"]}" client.jwk > client_cert.jwk
          
    3. Registrando o JWK no client

      • O JWK é registrado no client que previamente foi definido com o método de autenticação self_signed_tls_client_auth. Para recordar como se atualiza um client, acesse aqui: Atualizando Clients


      registrando jwk com o certificado


      • Além de registrar o JWK também é necessario especificar 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.pem
          
          SAN email field


  • Exemplo de uma requisição usando self_signed_tls_client_auth para autenticação

    curl -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"
    }
    

results matching ""

    No results matching ""