Pré-requisitos para consumir o endpoint 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 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>/oauth/authorize?client_id=<client id>&scope=<all or a spefic one>&response_type=<response type configured>&redirect_uri=<redirect uri>
    


Pré-requisitos para autenticação via TLS mútuo (mTLS)

Configurando NGINX para conexões HTTPS

A seguir iremos configurar o NGINX para realizar conexões seguras via HTTPS, partiremos da premissa que o NGINX já esteja instalado, e que a pasta nginx/sites-available e o arquivo nginx/sites-available/default estejam presentes no sistema.

  • Observação: O uso do Nginx no contexto desta documentação visa apenas exemplificar um servidor web com as configurações necessárias para proxy reverso com HTTPS configurado, qualquer outro servidor web que atenda os mesmos requisitos também pode ser usado.

    • Configurando o arquivo nginx/sites-available/default

    • Navegar até a pasta nginx/sites-available
      cd /etc/nginx/sites-available
      
    • Abrir o arquivo default em algum editor de texto
      # Obs: talvez seja necessário abrir o arquivo em modo administrador
      sudo vi default
      
    • Exemplo de configuração para habilitar conexões HTTPS

      server {
       listen 80;
       return 302 https://$host$request_uri;
      }
      server {
      
             listen 443 ssl default_server;
             listen [::]:443 ssl default_server;
      
             server_name <your_server_name>;
      
             ssl_certificate        /etc/nginx/certs/server.chained.cert.pem;
             ssl_certificate_key    /etc/nginx/certs/server.key.pem;
             ssl_protocols          TLSv1 TLSv1.1 TLSv1.2 TLSv1.3;     
             ssl_verify_client      optional_no_ca;
             ssl_session_cache      shared:SSL:10;
      
            location / {
                    proxy_set_header Host $host
                    proxy_set_header X-Client-Cert $ssl_client_cert;
                    proxy_pass http://[ip ou hostname (fqdn)];
            }
      }
      
    • Testar e atualizar as configurações.

      • Verificar se há algum erro nas configurações
        ngxin -t
        
      • Atualizar as configurações
        nginx -s reload
        

Certificados digitais

Esta seção contém uma breve descrição da documentação da OpenSSL CA, uma biblioteca com utilitários criptográficos que nos permite lidar com certificados digitais. Aqui utilizaremos a biblioteca para agir como uma autoridade de certificação e emitirmos nossos próprios certificados públicos autenticados.

1. Criação do par chave/certificado raíz
  • Referência: Create the Root Pair
  • Aqui deve ser criado o certificado raíz, que em conjunto com o intermediário irá realizar assinatura dos certificados do server e do client. O certificado raíz não assina outros certificados diretamente, ele é usado apenas como media de segurança, uma vez que, idealmente, ele é armazenado em um ambiente com pouca exposição.
    2. Criação do par chave/certificado intermediário
  • Referência: Create the Intermediate Pair
  • Nesta etapa espera-se que seja criado o certificado intermediário, este que realizará de fato as assinaturas de outros certificados em nome do certificado raíz. Os dois certificados, raíz e intermediário, posteriormente serão registrados nas configurações da aplicação. A seção Configurando a aplicação contém mais detalhes a respeito desse processo
    3. Criação e assinatura dos certificados
  • Referência: Sign Server and Client Certificates
  • Por fim, deve-se criar os certificados do server que serão utilizados para realizar conexões seguras, e o certificado do client que posteriormente será usado para autentica-lo com o método TLS CLIENT AUTH

Configurando a aplicação

TLS Trusted Certificates
  • Nessse campo deve-se colocar os certificados raíz e intermediário criados na seção Certificads Digitais

    1. Concatenamos o conteúdo dos dois arquivos em um único arquivo
      cat ca.cert.pem intermediate.cert.pem > ca+intermediate.pem
      
    2. Em seguida, basta colar o conteúdo do arquivo ca+intermediate.pem no campo TLS Trusted Certificates regitrando root ca e intermediate ca
    MTLS Endpoint Aliases (URL)
  • Nesses campos deve-se colocar os endpoints que estão configurados para receber conexões via mTLS. A seção Configurando NGINX para conexões HTTPS tratou do assunto. registrando endpoint aliases

    TLS Client Certificate Header Name

    registrando o certificate header configurado no NGINX

    TLS Client Certificate-Bound Access-Token

    ativando certificate bound access token

results matching ""

    No results matching ""