La validación del token falla porque las reclamaciones del token no coinciden con la política de despliegue
Descubra cómo solucionar las discrepancias en las reclamaciones de validación de tokens al llamar a las API, después de haber creado correctamente gateways de API y despliegues de API con el servicio API Gateway.
Si API Gateway rechaza una solicitud durante la validación del token, es posible que las reclamaciones del token no coincidan con la política de autenticación para el despliegue. El token puede estar presente y bien formado, pero la validación aún falla si el emisor, el público, el tiempo de caducidad o las reclamaciones personalizadas requeridas no coinciden con la política de ruta.
Emitir síntomas
Es posible que vea uno o más de los siguientes síntomas:
- La solicitud se rechaza durante la autenticación, aunque la solicitud incluya un token con el formato correcto.
- La carga útil del token aparece válida después de decodificarla, pero API Gateway aún niega la solicitud.
- La autenticación falla con errores de validación de reclamación para el valor de reclamación personalizado
aud,iss,expo necesario. - La misma aplicación se ejecuta correctamente con un token y falla con otro token de un emisor, público o entorno diferente.
Causas posibles
Este problema puede tener una o más de las siguientes causas:
- La reclamación
auddel token no coincide con el público configurado para el despliegue. - La reclamación
issdel token no coincide con el emisor configurado. - La política de autenticación requiere una reclamación personalizada que falta en el token.
- La política de autenticación requiere un valor de reclamación personalizado que no coincida con el token.
- El token ha caducado o los valores de hora del token están fuera de la asignación de sesgo de reloj configurada.
- Para la validación basada en detección o en introspección, el juego de reclamaciones devuelto no cumple la política de despliegue.
Revisar la política de autenticación
Revise la política de autenticación de la ruta que gestionó la solicitud y verifique la siguiente configuración:
authentication.audiencescontiene el público para el que se ha emitido el token.authentication.issuerscontiene el proveedor de identidad que ha emitido el token.verifyClaimsincluye solo las reclamaciones y los valores que la ruta debe aplicar.maxClockSkewInSecondsrepresenta la diferencia de tiempo esperada entre el emisor del token y los sistemas que validan la solicitud.
Si el fallo está relacionado con el tiempo, compare el valor exp del token con la hora UTC actual y la asignación de sesgo de reloj configurada.
Mensajes del registro de revisiones
Revise el log de ejecución de API Gateway en Logging para la solicitud fallida. Utilice el ID de solicitud de la respuesta para buscar la entrada de log coincidente.
Busque eventos de fallo de autenticación, como los siguientes:
jwtAuthentication.authenticationFailedtokenAuthentication.authenticationFailed
A continuación, revise el mensaje de registro para la validación de reclamación fallida. El mensaje puede identificar la reclamación o el valor que no cumplió la póliza.
Validation failed for 'exp' claim.JWT token not issued by the configured issuers.JWT token not issued for the configured audience.JWT token missing required claim '<claim>'.JWT token does not have the expected claim value for '<claim>'.
Validar las reclamaciones de token
Utilice el método de validación que coincida con el tipo de token.
Para un token web JSON (JWT), descodifique la carga útil y compare las reclamaciones relevantes con la configuración de despliegue. Compruebe los valores de reclamación personalizada aud, iss, exp y necesarios.
import base64
import json
token = "<paste-jwt-here>"
payload = token.split(".")[1]
payload += "=" * (-len(payload) % 4)
print(json.dumps(json.loads(base64.urlsafe_b64decode(payload)), indent=2))Para un token opaco, llame directamente al punto final de introspección configurado. Compare los valores de reclamación personalizados, aud, iss y exp devueltos con la política de despliegue de API Gateway.
curl -sS -u "<client-id>:<client-secret>" \
-H "Content-Type: application/x-www-form-urlencoded" \
-d "token=<paste-token-here>" \
"https://<identity-provider>/oauth2/v1/introspect"Valide el token con respecto al despliegue exacto y la configuración de ruta que ha gestionado la solicitud con fallos.
Corregir discrepancias de reclamación
Aplique la corrección que coincida con la comprobación de validación fallida:
- Si el público es incorrecto, actualice
authentication.audienceso utilice un token que se haya emitido para el público esperado. - Si el emisor es incorrecto, actualice
authentication.issuerso utilice un token del proveedor de identidad esperado. - Si falta una reclamación personalizada obligatoria, actualice el proceso de emisión del token o actualice
verifyClaimspara que coincida con el requisito previsto. - Si una reclamación personalizada necesaria tiene un valor incorrecto, corrija el valor de reclamación de token o actualice el valor esperado en
verifyClaims. - Si el token ha caducado, vuelva a intentar la solicitud con un token válido.
- Si el fallo se debe a un sesgo de reloj, ajuste
maxClockSkewInSecondssolo cuando se espere una diferencia de tiempo y sea aceptable para los requisitos de seguridad.
Verificar validación de token
Después de actualizar la política o de volver a intentar la solicitud con un token corregido, verifique el resultado:
- Vuelva a enviar la misma solicitud.
- Confirme que el despliegue acepta la solicitud.
- Confirme que el log de ejecución ya no muestra el fallo de validación de reclamación.
Para obtener más información
Para obtener más información, consulte: