Le Guide API ReST | Marmicode
  • Le Guide API ReST par Marmicode
  • API ReST
    • L'Ecosystème Moderne
    • Le Besoin
    • Re.S.T. : REpresentational State Transfer
    • Les 5 règles et ½ de l’API ReST
    • Le Modèle de Maturité de Richardson
    • H.A.T.E.O.A.S. & Resource Linking
    • Avis Subjectif sur H.A.T.E.O.A.S. et le Semantic Web
    • ReST over HTTP
    • HTTP & CRUD
    • ReSTful donc Stateless
    • Pragmatisme, Idéologie et ReSTafarians
  • Conventions & Bonnes Pratiques
    • Nommage
    • Base URL
    • Media Type
    • Versioning
    • Propriété “id”
    • Polymorphisme
    • Datetime
    • Ressource d'Association
    • Pourquoi Appliquer ces Bonnes Pratiques
    • Zalando ReSTful API Guidelines
  • Les Outils
    • Swagger
    • OpenAPI Visual Editors
    • IDE Plugins
    • Postman
    • Insomnia
    • Fake & Sandbox
    • JSON Generator
    • Pact
  • Sécurité des APIs ReST
    • OWASP Top 10
    • Authentification et Session Management
    • Autorisation et Gestion des Permissions
    • Validation, Canonicalization, Escaping & Sanitization
    • Cookies are EVIL
    • C.O.R.S.
    • C.S.R.F.
    • C.S.R.F. & Media Type
    • C.S.R.F. Mitigation
    • C.S.R.F. & "Resource Linking"
    • J.O.S.E.
      • J.W.K.
      • J.W.S.
      • J.W.E.
    • J.W.T.
      • Description et Fonctionnement de JWT
      • Usages et Avantages
      • Utilisation de JWT pour l’Authentification
      • JWT, Authentification, Sessions et Risques Sécurité
      • Recommandations JWT
    • OAuth 2
      • OAuth 2 Roles
      • OAuth 2 Abstract Flow
      • OAuth 2 Authorization Code Flow
      • OAuth 2 Implicit Flow
      • OAuth 2 Resource Owner Password Credentials Flow
      • OAuth 2 Client Credentials
      • OAuth 2 Registration
      • OAuth 2 Risques & Recommandations
      • OAuth 2 Substitution Attack
    • OpenID Connect
      • Terminologie
      • Quoi de Neuf ?
      • OpenID Connect Flows
      • Que Faire ?
  • Autres Spécifications
    • JSON API
    • H.A.L.
    • JSON LD
    • Les Autres Initiatives
    • So What?
  • Quelques Liens & Ressources
  • Stay Tuned
    • 📝Blog
    • 🐦Twitter
    • 📬Newsletter
Propulsé par GitBook
Sur cette page
  1. Sécurité des APIs ReST
  2. OAuth 2

OAuth 2 Authorization Code Flow

PrécédentOAuth 2 Abstract FlowSuivantOAuth 2 Implicit Flow

Dernière mise à jour il y a 4 ans

  1. Le Client redirige le Resource Owner vers l'Authorization Server :

https://accounts.google.com/o/oauth2/v2/auth?
response_type=code
&client_id=CLIENT_ID
&redirect_uri=https://cal-tracker.wishtack.io/oauth/callback // optional
&scope=email%20calendar:read
&state=... // state is recommended thus optional 😢
  • client_id : ID unique du Client.

  • redirect_uri : Une des URLs de retour parmi la liste transmise à l'Authorization Server à l'enregistrement. Si le paramètre est absent, l'Authorization Server utilisera la valeur par défaut configurée lors de l'enregistrement.

  • scope : liste des autorisations demandées.

  • state : Paramètre malheureusement optionnel permettant au Client de retrouver le contexte d'initiation de la demande. Il sert surtout à transmettre un "nonce" (token aléatoire) pour des raisons de sécurité.

  • Le Resource Owner confirme ou rejette les autorisations d’accès demandées sur l’interface proposée par l'Authorization Server.

  • Le Client reçoit l'Authorization Code par redirection (paramètre code) :

https://cal-tracker.wishtack.io/oauth/callback?
code=AUTHORIZATION_CODE
&state=...
  1. Le Client peut alors échanger l'Authorization Code contre un Access Token auprès de l’API OAuth 2 de l'Authorization Server.

POST https://accounts.google.com/token

client_id=CLIENT_ID
&client_secret=CLIENT_SECRET
&grant_type=authorization_code
&code=AUTHORIZATION_CODE
&redirect_uri=https://cal-tracker.wishtack.io/oauth/callback
  • client_secret : Secret du Client configuré lors de l'enregistrement.

  • En cas de succès, le Client reçoit alors l'Access Token et un Refresh Token optionnel :

{
    "access_token": "ACCESS_TOKEN",
    "token_type": "bearer",
    "expires_in": 2592000,
    "refresh_token": "REFRESH_TOKEN",
    "scope": "email,calendar:read",
    "some_user_info":{
        "first_name": "John",
        "last_name": "DOE",
        "email": "j.doe@ibm.com",
        "is_cool": "definitely not!"
    }
}

En cas d’expiration de l'Access Token et si le Client a reçu un Refresh Token, le Client peut renouveler sa demande avec le Refresh Token et obtenir de nouveaux Access Token et Refresh Token.

L'Authorization Code est un code à usage unique dont la durée de vie doit être très courte (moins de 10 minutes).

OAuth 2 Authorization Code Flow