Table of Contents

Autenticação

Quando tiver sua conta em mãos, use sua chave de autenticação única para se autenticar na nossa API através do cabeçalho Authorization:

curl https://inference.aivax.net/api/v1/information/models.txt \
    -H 'Authorization: Bearer oky_gr5uepj...'

Você também pode enviar o seu token de autorização pelo parâmetro da query ?api-key, exemplo:

curl https://inference.aivax.net/api/v1/information/models.txt?api-key=oky_gr5uepj...

Não há necessidade de enviar o esquema de autenticação Bearer em ambos cabeçalhos, mas é possível por questões de compatibilidade.

Autenticando hooks

Requisições da AIVAX para seus serviços, seja workers de gateways de IA ou chamadas de função server-side, um cabeçalho X-Request-Nonce é encaminhado em todas as requisições conténdo um hash BCrypt sendo um salto da chave de hook definida em sua conta.

A validação é simples: verifique se o hash em X-Request-Nonce é um produto da chave de salto definida em sua conta.

Dessa forma, você poderá autenticar se as requisições da AIVAX para seus serviços são genuínas através desse token. Se sua conta não tiver definido uma chave de hook, esse cabeçalho não será enviado.

Veja os exemplos abaixo para validação da chave de hook:

using BCrypt.Net;

[RoutePrefix("/api/aivax-protocol-functions")]
internal class MyController : Controller
{
    public MyController()
    {
        this.HasRequestHandler(RequestHandler.Create(
            execute: (req, ctx) =>
            {
                // Obtém o nonce enviado da requisição
                var hash = this.Request.Headers ["X-Request-Nonce"];
                if (hash == null)
                {
                    return new HttpResponse(HttpStatusInformation.Unauthorized);
                }
                
                // Valida o hook usando a biblioteca BCrypt.Net
                var secretWord = Environment.GetEnvironmentVariable ("AIVAX_HOOK_SECRET");
                if (!BCrypt.Net.BCrypt.Verify(secretWord, hash, enhancedEntropy: false))
                {
                    return new HttpResponse(HttpStatusInformation.Forbidden);
                }
                
                // Continua a requisição após hook validado
                return null;
            }));
    }
    ...
}