Pular para o conteúdo principal

Autenticação

Todas as APIs do IDCloud (contratos Web & SDK e API) utilizam OAuth2 com JWT Bearer Grant Type (RFC 7523). Você gera uma asserção JWT de curta duração no seu back-end, troca-a por um token Bearer e usa esse token em todas as chamadas subsequentes.

Nunca faça isso no lado do cliente

A asserção JWT deve ser gerada somente no seu back-end. Nunca exponha sua chave privada em código front-end, aplicativos móveis, repositórios ou logs.

Obtendo credenciais

Antes de gerar tokens, você precisa de uma conta de serviço provisionada pela Unico. Entre em contato com o suporte da Unico e forneça:

  • Nome da conta de serviço (máx. 12 caracteres)
  • Nome, e-mail e telefone do responsável (somente números do Brasil, EUA ou México)

Você receberá:

  • Nome único da conta
  • ID do tenant
  • Payload JWT base
  • Arquivo de chave privada (formato .pem)
Uma conta por ambiente

Mantenha contas de serviço separadas para UAT e Produção.

Construindo a asserção JWT

A asserção é um JWT no formato JWS compacto: {Base64url(Header)}.{Base64url(Payload)}.{Base64url(Signature)}.

Header
{
"alg": "RS256",
"typ": "JWT"
}
Payload
ClaimValorNotas
iss<account_name>@<tenant_id>.iam.acesso.ioFornecido com suas credenciais
audhttps://identityhomolog.acesso.io (UAT) ou https://identity.acesso.io (Produção)Deve corresponder ao host do endpoint de token
scope*Concede todas as permissões
iatTimestamp Unix (segundos)Hora em que o JWT foi emitido
expiat + máx. 3600Não pode ultrapassar 1 hora a partir de iat
{
"aud": "https://identity.acesso.io",
"scope": "*",
"iat": 1738086000,
"exp": 1738089600
}
Signature

Assine o header + payload usando RS256 (RSA + SHA-256) com a chave privada .pem fornecida pela Unico.

Não adicione claims extras

Qualquer campo não listado acima (ex.: sub, jti, nbf) causará um erro 1.2.22. Use apenas os claims indicados.

Solicitando o token

O endpoint de token é o mesmo para ambos os contratos:

AmbienteEndpoint
ProduçãoPOST https://identity.acesso.io/oauth2/token
UATPOST https://identityhomolog.acesso.io/oauth2/token
Request
ParâmetroValor
Content-Typeapplication/x-www-form-urlencoded
grant_typeurn:ietf:params:oauth:grant-type:jwt-bearer
assertionSeu JWT assinado
curl -X POST https://identity.acesso.io/oauth2/token \
-H "Content-Type: application/x-www-form-urlencoded" \
-d "grant_type=urn:ietf:params:oauth:grant-type:jwt-bearer" \
-d "assertion=eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9..."
Response
{
"access_token": "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9...",
"token_type": "Bearer",
"expires_in": 3600
}
CampoTipoDescrição
access_tokenstringToken de acesso JWT. Use em Authorization: Bearer <token> em todas as chamadas da API.
expires_inintegerTempo de expiração em segundos. Exemplo: 3600.
token_typestringSempre Bearer.

Usando o token

Adicione o token ao header Authorization de cada requisição da API. O header é idêntico para ambos os contratos — o que difere é o host e o caminho da API que você está chamando:

ContratoHost de ProduçãoHost de UAT
Web & SDKhttps://api.idcloud.unico.apphttps://api.idcloud.uat.unico.app
APIhttps://api.id.unico.apphttps://api.id.uat.unico.app

Web & SDKAuthorization é o único header de autenticação necessário:

curl -X POST https://api.idcloud.unico.app/client/v1/process \
-H "Authorization: Bearer $ACCESS_TOKEN" \
-H "Content-Type: application/json" \
-d '{ ... }'

APIAuthorization é utilizado junto com o header APIKEY:

curl -X POST https://api.id.unico.app/processes/v1 \
-H "Authorization: Bearer $ACCESS_TOKEN" \
-H "APIKEY: $API_KEY" \
-H "Content-Type: application/json" \
-d '{ ... }'

Renovação do token

Os tokens expiram após 3600 segundos. Implemente a renovação proativa no seu back-end:

  • Rastreie expires_in da resposta do token e armazene o timestamp de expiração.
  • Solicite um novo token quando restar 10 minutos ou menos antes da expiração.
  • Nunca aguarde um 401 em produção para acionar uma renovação.

Referência da API

A especificação OpenAPI completa do endpoint de token está disponível em authentication.yaml.

MétodoCaminhoDescrição
POST/oauth2/tokenTroca uma asserção JWT assinada por um token de acesso Bearer

Códigos de erro

CódigoDescriçãoAção
1.0.1O ID fornecido na formação do iss está incorretoVerifique se o campo iss corresponde ao ID do tenant fornecido quando a chave privada foi gerada
1.0.14Aplicação não está ativaVerifique com o gestor do projeto se a aplicação utilizada está ativa
1.1.1O parâmetro scope não foi fornecidoAdicione "scope": "*" ao seu payload JWT
1.2.4Asserção JWT inválidaA asserção JWT não é mais válida. Duas causas: (a) o tempo atual ultrapassou exp (JWT verdadeiramente expirado — gere uma nova asserção para cada solicitação de token); ou (b) exp ultrapassa iat + 3600 (tempo de vida muito longo — limite exp a iat + 3600).
1.2.5Falha na validação do JWTO JWT não pode ser validado. Verifique os parâmetros e certifique-se de que foi assinado com RS256 e a chave privada correta
1.2.6Chave privada não é mais válidaA chave privada usada para assinar o JWT não é mais aceita. Solicite novas credenciais para a conta
1.2.7JWT já utilizadoO JWT não é mais aceito, pois já foi utilizado. Gere uma nova asserção para cada solicitação de token
1.2.11Conta não está ativaA conta utilizada não está ativa
1.2.14Conta sem as permissões necessáriasA conta utilizada não possui as permissões necessárias
1.2.18Conta temporariamente bloqueadaA conta foi temporariamente bloqueada por exceder o número de tentativas de autenticação inválidas
1.2.19Impersonificação de usuário não autorizadaO JWT contém um claim sub apontando para uma conta que não está autorizada para impersonificação. Remova o claim sub do payload.
1.2.20Falha na decodificação do JWTFalha ao decodificar o JWT. Verifique o formato do token e se foi assinado com RS256.
1.2.21Chave privada incorreta / Falha na autenticaçãoA assinatura do JWT não pôde ser verificada com nenhuma chave conhecida para esta conta. Certifique-se de usar a chave privada .pem correta para esta conta de serviço e ambiente.
1.2.22Campos não permitidos no payloadO JWT contém campos de payload extras que não são permitidos. Remova quaisquer claims não listados neste guia (ex.: sub, jti, nbf). Observação: se você incluiu um claim sub e recebeu 1.2.19, esse erro tem precedência.
1.3.1Restrição de acesso por IPSeu IP não está na lista de permissões desta conta
1.3.2Restrição de acesso por horárioA requisição está fora da janela de horário permitida para esta conta

Próximos passos