Autenticação da API

A API terá acesso restrito a clientes autorizados, e para garantir a segurança e autenticidade das requisições, é utilizado o protocolo OAuth2 com o fluxo Client Credentials.

Autenticação via OAuth2 Client Credentials#

Cada cliente receberá um client_id e client_secret, que deverão ser utilizados para solicitar um token de acesso, que deverá ser enviado nas requisições subsequentes. A aplicação utilizara a informação do cliente_id, para fazer uma query na tabela do banco de dados "omni_transaction_clients", essa tabela possui informações específicas do cliente que efetuou a requisição como:

  1. client_id: Chave da tabela e usada para identificar o cliente.
  2. Instance: Se refere a instância do SiTef Express que o cliente está instalado, é utilizado para a efetuar a marcação de resolução de pendência diretamente no bando de dados do SiTef Express. Também utilizado em conjunto com o id_integrador, pois esse id pode "colidir" entre integradores diferentes nas instâncias do SiTef Express.
  3. client_type: Campo utilizado para distinguir entre Cliente e Integrador, hoje existem apenas dois possíveis valores entendidos pela aplicação (CLIENT e INTEGRATOR).
  4. id_integrator: Campo utilizado para armazenar o ID do Integrador, será nulo se o usuário for um cliente;
  5. se_client: Campo utilizado para armazenar o ID do Cliente, será nulo se o usuário for um integrador;

Servidor de autenticação Keycloak#

O Keycloak é um servidor de autenticação open-source, que implementa o protocolo OAuth2, e é utilizado para gerar e validar tokens JWT. Como vamos seguir o modelo de Client Credentials, o realm utilizado não terá usuários cadastrados, apenas Clientes, e cada cliente receberá suas credenciais (cliente_id e client_secret) A API terá um endpoint de autenticação, que ficará responsável de comunicar com o Keycloak, fazendo com que o cliente não tenha necessidade de se comunicar diretamente com o Keycloak, garantindo assim a segurança e a simplicidade do processo. Primeiro o cliente deverá fazer uma requisição para o endpoint público de autenticação, utilizando suas credenciais (client_id e client_secret), e receberá um token JWT o qual deverá ser utilizado em todas as requests para endpoints privados, e será validado pela API em todas chamadas usando o endpoint do Keycloak correspondente.

Endpoint para autenticação#

Este endpoint permite que os clientes solicitem um token de autenticação para acessar os endpoints privados da API.

URL: /auth/token

Método HTTP: POST

Corpo da Requisição:

{
"clientId": "string",
"clientSecret": "string"
}

Parâmetros:

  • clientId (string): O ID do cliente que está solicitando o token. \
  • clientSecret (string): O segredo do cliente que está solicitando o token.

Resposta:

{
"accessToken": "string",
"expiresIn": "integer"
}

Campos da Resposta:

  • accessToken (string): O token de acesso gerado.
  • expiresIn (integer): O tempo em segundos até que o token expire.