API Endpoints
Fracttal →

HTTP Hawk


A API FRACTTAL pode usar o HTTP Hawk como protocolo de autenticação. Ela usa o MAC (Message Authentication Code), que é um mecanismo para fazer solicitações HTTP autenticadas por verificação criptográfica parcial.

Assim como o esquema de autenticação HTTP Basic, no esquema Hawk as credenciais do cliente incluem um identificador e uma chave. Entretanto, em contraste com o esquema HTTP Basic, a chave nunca é incluída na solicitação de autenticação, mas é usada para calcular o valor do campo MAC incluído na solicitação.

Os dados necessários para que o cliente se conecte à API FRACTTAL são a ID exclusiva e uma CHAVE SECRETA, que são atribuídas apenas uma vez à empresa.
Por razões de segurança, o ID exclusivo e a CHAVE SECRETA são conhecidos apenas pelo FRACTTAL SPA e pela empresa registrada.

A API FRACTTAL suporta apenas o algoritmo de hash sha256 para validação de HMAC e payload.

Cabeçalho da solicitação (Request Header)

O cabeçalho da solicitação de autorização consiste em campos no formato "key": "value", conforme mostrado na tabela a seguir:

CampoRequeridoDescrição
idSimID exclusivo que identifica a empresa registrada.
tsSimData com segundos no registro de data e hora no formato "Unix epoch". Essa data deve estar dentro de 60 segundos da data do servidor da API FRACTTAL. Se houver uma diferença muito grande, será retornado um erro.
nonceSimUma string aleatória. Que deve ser exclusiva para cada solicitação feita.
macSimO MAC deve ser codificado em base-64 a partir da string padronizada (consulte PADRONIZAÇÃO DE STRING).
extOpcionalDados específicos do aplicativo.
hashOpcionalCódigo base-64 da request payload..
appOpcionalO ID do aplicativo. Obrigatório se a solicitação for gerada a partir de um aplicativo.
digOpcionalO delegado do aplicativo.

Como o mac é calculado?

O MAC da solicitação é calculado usando o algoritmo "hmac-sha-256" e a chave secreta na string normalizada. Esse resultado é codificado em base-64.
Exemplo do mac = "/uYWR6W5vTbY3WKUAN6fa+7p1t+1Yl6hFxKeMLfR6kk="

Exemplo de cabeçalho de solicitação

Autorização: Hawk id="qUtGgNr7YTURDensMvGa1g",
mac="/uYWR6W5vTbY3WKUAN6fa+7p1t+1Yl6hFxKeMLfR6kk=",
ts=”1368116073″, nonce=”Wiok05gO”, app=”2HjRl8gWz5shfSXrwblRnw”

Cabeçalho de resposta

Toda resposta tem um cabeçalho Server-Authorization no cabeçalho. O cabeçalho tem o mesmo formato da solicitação, mas não tem tantos dados. O campo mac é sempre incluído e baseia-se nos dados que foram enviados na solicitação, os campos hash e ext são substituídos por valores específicos da resposta e a string do cabeçalho é diferente.
O hash é opcional e é um código base-64 da resposta request-payload.

Exemplo:

Autorização do servidor: Hawk
mac="YWojrFVgIjgd+RiPacnDwRcL8VtvcMEzahVfOpoLxoA=",
hash="yAF3A3y3uzLvNT2m/nVwsifn1+joCqu0uNWZS8RSv6Y=", hash="yAF3A3y3uzLvNT2m/nVwsifn1+joCqu0uNWZS8RSv6Y="

Normalização de strings

A cadeia de caracteres normalizada (ordenada) forma o valor do resumo HMAC do campo mac. Ela se baseia nos detalhes da solicitação e é composta de valores na estrutura "field": "value" e uma quebra de linha. Alguns desses campos também estão incluídos no cabeçalho da solicitação.

CampoDescrição
HeaderEspecifica o tipo de mac, um de hawk.1.header (cabeçalho de solicitação), hawk.1.response (cabeçalho de resposta).
tsData com segundos no registro de data e hora no formato "Unix epoch".
nonceUma cadeia de caracteres gerada aleatoriamente.
MethodO método HTTP da solicitação. Todas as letras devem estar em maiúsculas.
Request URIEsse é o URI de solicitação HTTP.
HostHost para onde a solicitação será enviada; a porta é omitida.
PortA porta pela qual a conexão será feita. Normalmente, é a porta 443.
hashEsse é o request-payload em base-64. Em branco se não existir.
extDados específicos do aplicativo. Em branco se não existirem
appO ID do aplicativo. Omitir se ele não existir
dlgO delegado do aplicativo. Omitir, a menos que o campo app exista. Se o campo app existir, defina-o como em branco.

Nota: Lembre-se de que deve haver uma quebra de linha entre cada campo.

Construção

Cabeçalho
ts
nonce
Solicitação de método
URI
Host
Porta
hash
ext
app
dlg

Exemplo com o campo app:

hawk.1.header
1353832234
j4h3g2
POST
/inventários/12345
app.fracttal.com
443


1234

Validação da carga útil

A carga útil é o corpo da solicitação/resposta. Nossos clientes têm a possibilidade opcional de validar a carga útil. Isso não é obrigatório, mas é altamente recomendável fazer isso quando possível.
Quando a autenticação do cabeçalho é gerada, o cliente calcula um hash da carga útil usando o algoritmo que você especificou (sha-256). O hash é calculado com base nos seguintes valores concatenados (cada valor seguido pelo caractere de quebra de linha):

  • Hawk.1.payload
  • O tipo de conteúdo em letras minúsculas sem nenhum outro parâmetro (exemplo: application/json)
  • A carga útil da solicitação antes de qualquer outra codificação de conteúdo.

Exemplo:

Carga útil: Obrigado por voar Hawk
Tipo de conteúdo: text/plain.

A construção da carga útil é a seguinte:

hawk.1.payload
text/plain

Obrigado por voar com o Hawk

O valor de hash resultante (sha-256) é:

Yi9LfIIFRtBEPt74PVmbTF/xVAwPn7ub15ePICfgnuY=

Portanto, a solicitação do cliente deve ter a seguinte aparência:

hawk.1.header
1353832234
j4h3g2
POST
/inventários/1234
app.fracttal.com
443
Yi9LfIIFRtBEPt74PVmbTF/xVAwPn7ub15ePICfgnuY=

some-app-ext-data

TS (Timestamp) fora do intervalo

Quando o ts do cliente estiver fora do intervalo de ±60 segundos do servidor, o servidor retornará o código, com o cabeçalho WWW-Authenticate contendo a data e a hora do servidor em registro de data e hora. O cálculo desse campo deve ser ajustado de acordo com a data e a hora da resposta.
Incluído na resposta está o campo tsm, que é um HMAC de um cabeçalho e data, seguido por uma nova linha para evitar ataques mal-intencionados.

Exemplo:

WWW-wAuthenticate: Hak ts="1365741469″,
tsm="b4Qqqhz8OUBq21saghHLV1ktwlXE72T1xtTEZkSlWizA=",
error="Stale timestamp" (registro de data e hora desatualizado)

Nota: Para saber mais sobre o esquema de autenticação Hawk, visite a página a seguir. Documentação oficial do Hawk