Logius-standaarden / OAuth-NL-profiel

Kennisplatform API's Nederlands profiel OAuth
https://logius-standaarden.github.io/OAuth-NL-profiel/
15 stars 5 forks source link

Aanbevelen of verplichten van response_mode=form_post #25

Open stiiin opened 2 years ago

stiiin commented 2 years ago

Om te voorkomen dat authorization codes uitlekken via de browsergeschiedenis en/of Referer headers, adviseert de huidige IETF draft voor "OAuth 2.0 Security Best Current Practice" het volgende:

Use the form post response mode instead of a redirect for the authorization response.

De onderliggende specificaties bestaan al enige tijd (de specificatie voor response modes in 2014 is gefinaliseerd, de specificatie van de form_post response mode in 2015). Een korte zoektocht wekt het vermoeden dat form_post breed wordt ondersteund (Auth0, Azure AD, Keycloak, Okta).

Het lijkt me daarom niet vreemd om op termijn deze response mode ook verplicht te stellen voor een v2.0 van het profiel. Hierbij de suggestie om het in ieder geval op te nemen in het profiel als aanbeveling.

De secties 2.3.1, 3.1.5 en 3.3 (refererend aan de huidige v1.0 van het profiel) moeten hiervoor worden aangepast. Voor zover ik begrijp (maar ik laat me graag corrigeren) is query effectief de verstekwaarde voor response_mode. Een implementatie die alléén deze response mode ondersteunt is nog compliant met het huidige profiel, waardoor het verplichten van form_post een breaking change zou zijn. Omdat ik niet bekend genoeg ben met het standaardiseringsproces, heb ik zowel mijn inschatting gegeven voor een backwards compatible change van het profiel (v1.1) en een breaking change van het profiel (v2.0): * Vul de sectie _2.3.1 Requests to the Authorization Endpoint_ aan met de parameter `response_mode`. * v1.1: Vereis het gebruik van de waarde `form_data`. * v2.0: Geef aan dat de parameter optioneel is. Raad het gebruik van de waarde `form_data` aan. (Sta niet expliciet de waarde `query` toe, gezien de aanwijzing in ["OAuth 2.0 Multiple Response Type Encoding Practices"](https://openid.net/specs/oauth-v2-multiple-response-types-1_0.html#ResponseModes).) * Vul de sectie _3.1.5 Discovery_ aan met [het optionele veld `response_modes_supported`](https://datatracker.ietf.org/doc/html/rfc8414#page-5). * v1.1: Vereis dat, wanneer dit veld is ingevuld, tenminste `form_data` wordt ondersteund. * v2.0: Vereis dat, wanneer dit veld is ingevuld, tenminste `form_data` en `query` worden ondersteund. * Wat betreft sectie _3.3 Response to Authorization Requests_: * v1.1: wijzig de sectie zo, dat de `form_data` response modes wordt gedefiniëerd. * v2.0: vul de sectie aan met een definitie van tenminste de `form_data` en `query` response modes.
stiiin commented 2 years ago

Merk overigens op dat openid.net ook verwijst naar de specificatie "JWT Secured Authorization Response Mode for OAuth 2.0 (JARM)" van de Financial-grade API working group. In deze specificatie wordt onder andere de response mode form_post.jwt gedefiniëerd. Ik weet te weinig van deze specificatie af, maar zie wel dat van de bovengenoemde implementaties alleen Keycloak ondersteuning lijkt te bieden.