OAuth 2.0
Flux Authorization Code
Implémentez de manière sécurisée l’autorisation, PKCE, l’échange de code, le renouvellement et la déconnexion.
1. Générer les valeurs de transaction
Pour chaque tentative de connexion, générez :
- une valeur
stateà forte entropie afin de lier la requête au callback - une valeur
nonceafin de lier les informations d’identité à la requête - un
code_verifier - PKCE à forte entropie et une
code_challenge, calculée à partir du condensat SHA-256 du verifier encodé en base64url
Conservez ces valeurs dans une transaction de courte durée, protégée côté serveur.
2. Rediriger vers l’autorisation
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. Valider le callback
Un callback réussi contient code et state. Comparez state à la valeur enregistrée, si possible avec une fonction de comparaison en temps constant. Rejetez toute transaction absente, réutilisée, expirée ou non concordante.
Un callback en échec contient error et peut contenir error_description. Ne consignez qu’un identifiant de corrélation interne sûr et affichez à l’utilisateur un message clair lui permettant de réessayer.
4. Échanger le code
Envoyez une requête de formulaire de serveur à serveur :
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_VERIFIERLes identifiants du client peuvent également être acceptés dans le corps du formulaire si cette option est configurée, mais HTTP Basic les sépare des paramètres du grant.
5. Lire les informations utilisateur
GET /oauth2/userinfoAuthorization: Bearer ACCESS_TOKENUtilisez la réponse pour créer une session locale sur le site, puis supprimez la transaction OAuth à usage unique.
Renouveler et révoquer
Échangez un refresh token valide avec grant_type=refresh_token sur /oauth2/token. Conservez les refresh tokens uniquement sur le serveur. Lorsque l’intégration n’a plus besoin d’un token, révoquez-le sur /oauth2/revoke et invalidez la session locale.