DEV-001 - Gerando JWT Da Unico Para Chamadas
ID: KB-DEV-001
Responsável: Thiago Amaral, TI
Status: Publicado
Última Atualização: 07/08/2025
Propósito
Instruir a emissão do token JWT para a realização de chamadas REST API na Unico.
Aplica-se a
Unico.
Pré-requisitos
Chave privada e pública do nosso ambiente na Unico.
Curl ou Postman para as requisições.
Instruções
1. Criando Usuário De Serviço
Solicite para o gerente de projetos responsável pela empresa enviando: nome da empresa, noma da aplicação, nome, e-mail e celular do responsável pela aplicação na empresa.
Dados da conta atual.
Conta: idcloud ID da chave: 92d795d8-dee0-4fb8-a21b-b99a5d358ca7 ID do tenant: 06051cdc-9b1a-47a7-b66c-5bec93ae666e
2. Criando O JWT
Defina oheader.
{ "alg":"typ" "RS256", "JWT" }Defina opayload.
{ "iss": "92d795d8-dee0-4fb8-a21b-b99a5d358ca7@06051cdc-9b1a-47a7-b66c-5b ec93ae666e.iam.acesso.io", "aud": "<https://identityhomolog.acesso.io>", "scope": "*", }Baixe a chave privada e pública enviada na criação da conta de serviço, ela virá no modelo account-name_account-id .
Com esses dados, utilize um script para a criação dos outros valores dinâmicos e assinatura em Base64 do header e payload juntos. Abaixo haverá um exemplo prático utilizandoBash script.
#!/usr/bin/env bash # ============================================================================== # SCRIPT COMPLETO PARA OBTER ACCESS TOKEN E FAZER UMA REQUISIÇÃO À API UNICO # Versão final com todas as correções aplicadas. # ============================================================================== # --- CONFIGURAÇÃO --- # Nome do arquivo da sua chave privada. PRIVATE_KEY_FILE="idcloud_92d795d8-dee0-4fb8-a21b-b99a5d358ca7.key.pem" # O 'issuer' da sua conta de serviço. # CORRIGIDO: Usando o nome da conta "idcloud" conforme a documentação. SERVICE_ACCOUNT_ISS="[email protected]" # O 'audience' e a URL da API de autenticação de PRODUÇÃO. AUTH_URL_BASE="<https://identity.acesso.io>" # O ID do processo que você quer consultar (exemplo). PROCESS_ID="bf3ce6d3-37c0-43be-9384-7059b05c7993" # --- LÓGICA DO SCRIPT --- echo "PASSO 0: Verificando pré-requisitos..." if [ ! -f "$PRIVATE_KEY_FILE" ]; then echo "ERRO: Arquivo de chave privada '$PRIVATE_KEY_FILE' não encontrado." exit 1 fi echo "OK: Chave privada encontrada." echo "--------------------------------------------------------" # Função para codificar em Base64URL base64url_encode() { base64 -w 0 | tr -d '=' | tr '/+' '_-' } # 1. Gerar o JWT (JSON Web Token) echo "PASSO 1: Gerando o JWT..." header_json='{"alg":"RS256","typ":"JWT"}' iat=$(date +%s) exp=$((iat + 3600)) # 1 hora de validade # CORRIGIDO: Usando 'jq -c' para garantir JSON compacto (sem espaços/quebras de linha) payload_json=$(jq -c -n \\ --arg iss "$SERVICE_ACCOUNT_ISS" \\ --arg aud "$AUTH_URL_BASE" \\ --arg iat "$iat" \\ --argjson exp "$exp" \\ '{iss: $iss, aud: $aud, scope: "*", iat: ($iat | tonumber), exp: $exp}') b64_header=$(echo -n "$header_json" | base64url_encode) b64_payload=$(echo -n "$payload_json" | base64url_encode) unsigned_token="$b64_header.$b64_payload" signature=$(echo -n "$unsigned_token" | openssl dgst -sha256 -sign "$PRIVATE_KEY_FILE" | base64url_encode) JWT="$unsigned_token.$signature" echo "OK: JWT gerado com sucesso." echo "--------------------------------------------------------" # 2. Trocar o JWT por um AccessToken echo "PASSO 2: Solicitando o AccessToken..." AUTH_URL_TOKEN="$AUTH_URL_BASE/oauth2/token" # CORRIGIDO: Script restaurado para modo funcional (não mais em debug) ACCESS_TOKEN=$(curl --silent --location --request POST "$AUTH_URL_TOKEN" \\ --header 'Content-Type: application/x-www-form-urlencoded' \\ --data-urlencode 'grant_type=urn:ietf:params:oauth:grant-type:jwt-bearer' \\ --data-urlencode "assertion=$JWT" | jq -r .access_token) # Verifica se o AccessToken foi obtido com sucesso if [ "$ACCESS_TOKEN" = "null" ] || [ -z "$ACCESS_TOKEN" ]; then echo "ERRO: Falha ao obter o AccessToken. Verifique as credenciais e a resposta do servidor." # Opcional: Descomente a linha abaixo para ver a resposta de erro completa do servidor # curl --location --request POST "$AUTH_URL_TOKEN" --header 'Content-Type: application/x-www-form-urlencoded' --data-urlencode 'grant_type=urn:ietf:params:oauth:grant-type:jwt-bearer' --data-urlencode "assertion=$JWT" exit 1 fi echo "OK: AccessToken recebido com sucesso." echo "--------------------------------------------------------" # 3. Fazer a requisição final à API desejada echo "PASSO 3: Executando a requisição final para o Process ID: $PROCESS_ID" API_URL="<https://api.cadastro.unico.app/client/v1/process/$PROCESS_ID>" curl --location "$API_URL" \\ --header "Authorization: Bearer $ACCESS_TOKEN" \\ --header 'Content-Type: application/json' echo # Adiciona uma nova linha no final para melhor formatação
Resultado Esperado
Utilizando o process ID desejado, é possível obter informações sobre uma assinatura emJSON.
Solução de Problemas
N/A
Artigos Relacionados
N/A
Anexos
N/A
Referências
https://devcenter.unico.io/idcloud/integracao/autenticacao/criando-uma-conta-de-servico
Seção para realização de uma conta de serviço na Unico IDCloud para autenticação.
Histórico de Revisões
Data
Versão
Autor
Descrição das Mudanças
07/08/2025
1.0
Thiago Amaral
Confeccção do documento.
Last updated