Autenticação HMAC
A API de Serviço (/api/service) utiliza autenticação HMAC (Hash-based Message Authentication Code) para garantir a segurança e integridade das requisições feitas pelos backends das suas aplicações.
Como Funciona:
- API Key: Sua aplicação backend precisa de um
apiKeyIde umapiSecretKeygerados pelo Draft Auth. - Timestamp: Cada requisição deve incluir um header
X-Request-Timestampcom o timestamp Unix (em milissegundos) atual. O Draft Auth rejeita requisições com timestamps muito antigos para prevenir ataques de replay. - Digest (para POST/PUT/PATCH): Para requisições com corpo (body), um header
Digestcontendo o hash SHA-256 do corpo (em base64) deve ser incluído (SHA-256=<hash>). Isso garante a integridade do corpo da requisição. - String para Assinar: Uma string específica é construída combinando:
- Método HTTP (ex:
POST) - Caminho e Query String (ex:
/api/service/users/123/access?param=1) - Valor do header
X-Request-Timestamp - Valor do header
Digest(mesmo que vazio para GET/DELETE)
- Método HTTP (ex:
- Assinatura HMAC: A “String para Assinar” é assinada usando HMAC-SHA256 com o
apiSecretKeyda sua aplicação. O resultado (em base64) é enviado no headerX-Signature. - Validação no Servidor: O Draft Auth:
- Busca o
apiSecretKeycorrespondente aoapiKeyIdrecebido. - Reconstrói a “String para Assinar” usando os headers recebidos.
- Recalcula a assinatura HMAC usando o
apiSecretKeyarmazenado. - Compara (de forma segura contra timing attacks) a assinatura calculada com a assinatura recebida (
X-Signature). - Verifica o
Digestse aplicável. - Verifica o
Timestamppara evitar replay attacks.
- Busca o
Biblioteca Cliente:
O pacote @draftauth/client simplifica esse processo, cuidando da geração dos headers e da assinatura HMAC automaticamente.