oidc connect login redirect troubles
Problem
Wenn mensch im Dashboard auf Login klickt kommt eins zwar bis zum Login beim Steering, danach aber nicht mehr retour. Das steering liefert dann nur folgenden Fehler:
Redirect URI Error
The request fails due to a missing, invalid, or mismatching redirection URI (redirect_uri).
Die URI unter der das passiert: http://127.0.0.1:8000/openid/authorize?client_id=761764&redirect_uri=http%3A%2F%2F127.0.0.1%3A8080%2Fstatic%2Foidc_callback.html&response_type=id_token%20token&scope=openid%20profile%20email&state=f1e0b6e7ddaa4b50af0c455e142701fc&nonce=723fa6cc06af4fe4a95097aaa3ee589c
Ursache
Aus irgendeinem Grund kann das steering nicht auf die OIDC callback Funktionen zugreifen, die das Dashboard unter /static/
anbietet.
Problemlösung
Erstmal nachprüfen ob im steering admin beim OIDC Client die Settings stimmen:
-
Client Type:
Public
-
Response Type:
id_token token (Implicit Flow)
-
JWT Algorithm:
RS256
-
Require Consent?:
No
-
Reuse Consent?:
Yes
- Redirect URIs:
http://localhost:8080/static/oidc_callback.html
http://localhost:8080/static/oidc_callback_silentRenew.html
http://localhost:8080/static/oidc_callback_popupRenew.html
Dann überprüfen ob wir auf diese Redirec URIs manuell zugreifen können, indem wir sie direkt in einem neuen Browserfenster öffnen. Wenn das geht, dann haben wir womöglich ein CORS-Problem vorliegen. Wir sollten als näxtes im Dashboard in der config/dev.env.js
prüfen ob folgende drei Zweilen mit jenen Redirect URIs zusammenpassen die wir im steering admin oben eingetragen haben:
API_STEERING_OIDC_REDIRECT_URI: '"http://localhost:8080/static/oidc_callback.html"',
API_STEERING_OIDC_REDIRECT_URI_SILENT: '"http://localhost:8080/static/oidc_callback_silentRenew.html"',
API_STEERING_OIDC_REDIRECT_URI_POPUP: '"http://localhost:8080/static/oidc_callback_popupRenew.html"',
Hier ist wichtig zu bedenken, dass OIDC die eingetragen und übermittelten Redirect URIs sehr genau nimmt. Was auch immder der anfragende Client in Login Request mitschickt muss genau mit dem übereinstimmen was steering eingetragen hat und dann entsprechend aufruft. Und dabei wird localhost
nicht einfach durch 127.0.0.1
ersetzt. Wir müssen also darauf achten, dass an diesen beiden Stellen die exakt gleichen URIs verwendet werden.
TODO
Nachdem dieses Problem ohne das nötige Hintergrundwissen zum OIDC provider von django und ohne das bereits einmal wo erlebt zu haben extrem mühsam ist muss das entsprechend in der Setup/Config-Doku von steering und dashboard gut und unübersehbar dokumentiert werden.