Saltar al contenido principal

Autenticación

Todas las APIs de IDCloud (contratos Web & SDK y API) usan OAuth2 con JWT Bearer Grant Type (RFC 7523). Usted genera una aserción JWT de corta duración en su back-end, la intercambia por un token Bearer y usa ese token en cada llamada posterior.

Nunca haga esto del lado del cliente

La aserción JWT debe generarse únicamente en su back-end. Nunca exponga su clave privada en código front-end, aplicaciones móviles, repositorios ni logs.

Obtención de credenciales

Antes de poder generar tokens, necesita una cuenta de servicio aprovisionada por Unico. Contacte al soporte de Unico y proporcione:

  • Nombre de la cuenta de servicio (máximo 12 caracteres)
  • Nombre, correo electrónico y teléfono del responsable (solo números de Brasil, EE. UU. o México)

Recibirá:

  • Nombre único de cuenta
  • Tenant ID
  • Payload JWT base
  • Archivo de clave privada (formato .pem)
Una cuenta por entorno

Mantenga cuentas de servicio separadas para UAT y Producción.

Construcción de la aserción JWT

La aserción es un JWT en formato JWS compacto: {Base64url(Header)}.{Base64url(Payload)}.{Base64url(Signature)}.

Header
{
"alg": "RS256",
"typ": "JWT"
}
Payload
ClaimValorNotas
iss<account_name>@<tenant_id>.iam.acesso.ioProporcionado con sus credenciales
audhttps://identityhomolog.acesso.io (UAT) o https://identity.acesso.io (Producción)Debe coincidir con el host del endpoint de token
scope*Otorga todos los permisos
iatMarca de tiempo Unix (segundos)Hora en que se emitió el JWT
expiat + máximo 3600No puede superar 1 hora desde iat
{
"aud": "https://identity.acesso.io",
"scope": "*",
"iat": 1738086000,
"exp": 1738089600
}
Signature

Firme el header + payload usando RS256 (RSA + SHA-256) con la clave privada .pem proporcionada por Unico.

No agregue claims adicionales

Cualquier campo no listado anteriormente (p. ej. sub, jti, nbf) causará un error 1.2.22. Use solo los claims mostrados.

Solicitud del token

El endpoint de token es el mismo para ambos contratos:

EntornoEndpoint
ProducciónPOST 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
assertionSu JWT firmado
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
}
CampoTipoDescripción
access_tokenstringToken de acceso JWT. Úselo en Authorization: Bearer <token> en todas las llamadas a la API.
expires_inintegerTiempo de expiración en segundos. Ejemplo: 3600.
token_typestringSiempre Bearer.

Uso del token

Agregue el token al encabezado Authorization de cada solicitud a la API. El encabezado es idéntico para ambos contratos — lo que difiere es el host y el path de la API que está llamando:

ContratoHost de producciónHost 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 es el único encabezado de autenticación requerido:

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

APIAuthorization se usa junto con el encabezado 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 '{ ... }'

Renovación del token

Los tokens expiran después de 3600 segundos. Implemente la renovación proactiva en su back-end:

  • Registre expires_in de la respuesta del token y almacene la marca de tiempo de expiración.
  • Solicite un nuevo token cuando queden 10 minutos o menos antes de la expiración.
  • Nunca espere un 401 en producción para activar la renovación.

Referencia de API

La especificación OpenAPI completa para el endpoint de token está disponible en authentication.yaml.

MétodoPathDescripción
POST/oauth2/tokenIntercambia una aserción JWT firmada por un token de acceso Bearer

Códigos de error

CódigoDescripciónAcción
1.0.1El ID proporcionado en la formación de iss es incorrectoVerifique que el campo iss coincida con el tenant ID proporcionado al generar la clave privada
1.0.14La aplicación no está activaConsulte con el gestor del proyecto si la aplicación utilizada está activa
1.1.1El parámetro scope no fue proporcionadoAgregue "scope": "*" a su payload JWT
1.2.4Aserción JWT inválidaLa aserción JWT ya no es válida. Dos causas: (a) el tiempo actual supera exp (JWT verdaderamente expirado — genere una nueva aserción para cada solicitud de token); o (b) exp supera iat + 3600 (vida útil demasiado larga — limite exp a iat + 3600).
1.2.5La validación del JWT fallóEl JWT no puede ser validado. Verifique los parámetros y asegúrese de que fue firmado con RS256 y la clave privada correcta
1.2.6La clave privada ya no es válidaLa clave privada usada para firmar el JWT ya no es aceptable. Solicite nuevas credenciales para la cuenta
1.2.7El JWT ya fue utilizadoEl JWT ya no es aceptable porque ya fue utilizado. Genere una nueva aserción para cada solicitud de token
1.2.11La cuenta no está activaLa cuenta utilizada no está activa
1.2.14La cuenta carece de los permisos necesariosLa cuenta utilizada no tiene los permisos necesarios
1.2.18Cuenta temporalmente bloqueadaLa cuenta ha sido temporalmente bloqueada por exceder el número de intentos de autenticación inválidos
1.2.19Suplantación de usuario no autorizadaEl JWT contiene un claim sub que apunta a una cuenta no autorizada para suplantación. Elimine el claim sub del payload.
1.2.20Error al decodificar el JWTNo se pudo decodificar el JWT. Verifique el formato del token y que haya sido firmado con RS256.
1.2.21Clave privada incorrecta / Autenticación fallidaLa firma del JWT no pudo verificarse con ninguna clave conocida para esta cuenta. Compruebe que está usando la clave privada .pem correcta para esta cuenta de servicio y entorno.
1.2.22Campos no permitidos en el payloadEl JWT contiene campos de payload adicionales que no están permitidos. Elimine cualquier claim no listado en esta guía (p. ej. sub, jti, nbf). Nota: si incluyó un claim sub y recibió 1.2.19, ese error tiene precedencia.
1.3.1Restricción de acceso por IPSu IP no está en la lista de permitidos para esta cuenta
1.3.2Restricción de acceso por horarioLa solicitud está fuera de la ventana de tiempo permitida para esta cuenta

Próximos pasos