OAuth 2.0
Flujo Authorization Code
Implemente de forma segura la autorización, PKCE, el intercambio de código, la renovación y el cierre de sesión.
1. Generar los valores de la transacción
En cada intento de inicio de sesión, genere:
- un valor
statede alta entropía para vincular la solicitud con el callback - un valor
noncepara vincular las afirmaciones de identidad con la solicitud - un
code_verifier - PKCE de alta entropía y un
code_challenge, calculado como el resumen SHA-256 del verifier codificado en base64url
Guarde los valores en una transacción de corta duración protegida en el servidor.
2. Redirigir a la autorización
GET /oauth2/authorize? response_type=code& client_id=YOUR_CLIENT_ID& redirect_uri=https%3A%2F%2Fexample.com%2Fauth%2Fdocid%2Fcallback& scope=openid%20profile%20email& state=RANDOM_STATE& nonce=RANDOM_NONCE& code_challenge=PKCE_CHALLENGE& code_challenge_method=S2563. Validar el callback
Un callback correcto contiene code y state. Compare state con el valor guardado mediante una comparación de tiempo constante siempre que sea posible. Rechace las transacciones ausentes, reutilizadas, caducadas o que no coincidan.
Un callback fallido contiene error y puede contener error_description. Registre únicamente un identificador de correlación interno seguro y muestre al usuario un mensaje comprensible que le permita volver a intentarlo.
4. Intercambiar el código
Envíe una solicitud de formulario de servidor a servidor:
POST /oauth2/tokenContent-Type: application/x-www-form-urlencodedAuthorization: Basic BASE64_CLIENT_ID_AND_SECRET grant_type=authorization_code&code=RETURNED_CODE&redirect_uri=https%3A%2F%2Fexample.com%2Fauth%2Fdocid%2Fcallback&code_verifier=ORIGINAL_PKCE_VERIFIERLas credenciales del cliente también pueden aceptarse en el cuerpo del formulario cuando así se haya configurado, pero HTTP Basic mantiene las credenciales separadas de los parámetros del grant.
5. Obtener la información del usuario
GET /oauth2/userinfoAuthorization: Bearer ACCESS_TOKENUtilice la respuesta para crear una sesión local en el sitio web y elimine después la transacción OAuth de un solo uso.
Renovar y revocar
Intercambie un refresh token válido con grant_type=refresh_token en /oauth2/token. Guarde los refresh tokens únicamente en el servidor. Cuando la integración ya no necesite un token, revóquelo en /oauth2/revoke e invalide la sesión local.