OpenID Connect Flows
Type Flows
De “OpenID Connect core” standaard beschrijft drie mogelijke OpenID Connect Flows:
Authorization Code Flow
Dit is de veiligste en meest gebruikte flow, waarbij alle tokens afkomstig zijn van het Token Endpoint.
De Authorization Code Flow stuurt na een succesvolle authenticatie een Authorization Code naar de Client die deze onmiddellijk (en mits de juiste credentials) kan inruilen voor een ID-token en een access token op het Token Endpoint. Dit heeft als voordeel dat de tokens niet blootgesteld worden via de browser (de User Agent).
De details omtrent deze flow kan u hier terugvinden.
Dit is de enige flow die door de ACM IDP ondersteund wordt.
Implicit Flow
Bij deze flow worden alle tokens ontvangen van het Authorization Endpoint, het Token Endpoint wordt niet gebruikt. Het ID-token en access token worden via de browser aan de Client bezorgd, waardoor deze rechtstreeks blootgesteld worden voor de eindgebruiker en in de browser: hierdoor is deze flow intrinsiek onveilig.
Vroeger werd deze flow vaak gebruikt voor publieke Clients (zoals bijvoorbeeld mobiele apps of Single Page Applications), maar er heerst nu een consensus dat publieke Clients best gebruik maken van de Authorization Code Flow in combinatie met PKCE.
Deze Flow wordt niet ondersteund door de ACM IDP.
Hybrid Flow
De Hybrid Flow is een combinatie van de twee voorgaande flows. Deze flow laat toe om net zoals de Implicit Flow onmiddellijk gebruik te maken van het ID-token, maar net zoals bij de Authorization Code Flow bijkomend een Authorization Code in één roundtrip te bekomen: dit kan dan -mits de juiste credentials- gebruikt worden voor langdurige access (via het gebruik van refresh tokens).
Deze flow kan de Authorization Code en tokens bekomen van het Authorization Endpoint, maar kan ook tokens bekomen van het Token Endpoint.
Deze Flow wordt niet ondersteund door de ACM IDP.
Eigenschappen van de verschillende Flows
Authorization Code | Implicit | Hybrid | |
---|---|---|---|
Alle tokens komen van het Authorization Endpoint | neen | ja | neen |
Alle tokens komen van het Token Endpoint | ja | neen | neen |
Tokens worden via de browser gestuurd | neen | ja | ja |
Client kan zich authenticeren (bvb. client/secret) | ja | neen | ja |
Refresh tokens kunnen gebruikt worden | ja | neen | ja |
Communicatie in één roundtrip | neen | ja | neen |
Meeste communicatie is server-naar-server | ja | neen | varieert |
Response types per Flow
Flow | Response type |
---|---|
Authorization Code | code |
Implicit | id_token |
Implicit | id_token token |
Hybrid | code id_token |
Hybrid | code token |
Hybrid | code id_token token |