2017-02-10 5 views
0

Vorausgesetzt, dass der implizite OpenID Connect-Fluss hauptsächlich von Single-Page-Anwendungen (SPA) verwendet wird, erfolgt der erste Zugriff auf das Back-End/API unter Verwendung eines AJAX-Aufrufs nicht durch Laden des SPA selbst.OpenID Connect impliziter Fluss: Reagieren mit einer Weiterleitung?

Wenn die API erkennt, dass die Anforderung ohne Token gesendet wird, wie sollte sie dann reagieren?

IMHO macht es nicht viel Sinn mit einer Weiterleitung zu antworten, da dies nur zur Umleitung der AJAX-Anfrage führen würde, nicht das gesamte Browser-Fenster (was notwendig ist).

Also, reagiert mit einem 401 gut? Oder gibt es einen anderen (besseren) Weg, was zu tun ist? Angenommen, eine 401 ist in Ordnung, sollte der Server irgendwie angeben, welcher Identity-Provider verwendet werden soll, oder ist dies vollständig dem Client überlassen, und das Backend nimmt an, dass der Client weiß, welchem ​​Identity-Provider er vertraut?

Antwort

1

Die RFC6749 zeigt nicht an, wie die Antwort entworfen werden sollte.

Da der Client jedoch eine API-Antwort erwartet, sollte Ihr Ressourcenserver eine API-Antwort mit dem entsprechenden HTTP-Code und Antworttext senden.

Wenn der Ressourcenserver die Anforderung ablehnt, weil das Token epired oder ungültig ist, sollte der Antwortcode 400 lauten. Wenn das Zugriffstoken nicht mit dem reauired-Bereich ausgestellt wurde oder wenn der Ressourcenbesitzer kein Recht auf die Ressource hat , dann sollte der Code 403. werden, wenn kein Token gefunden wird, sollte der Code 401.

der Körper der Fehlerreaktionen ähnlich sein können, die in der Beschreibung beschrieben:

HTTP/1.1 403 OK 
Content-Type: application/json;charset=UTF-8 
Cache-Control: no-store 
Pragma: no-cache 
{ 
    "error":"insufficient_scope", 
    "error_description":"The scope 'WRITE' is required.", 
    "error_uri":"https%3A%2F%2Fwww.example.com%2Fdoc%2Ferror403%2Finsufficient_scope" 
} 

in Bezug auf die Art und Weise zu Geben Sie an, welches IdP zu verwenden ist, ich kenne das specification is being written, aber im Moment liegt es an Ihnen, anzugeben, wie Clients mit Ihrem Ressourcenserver interagieren sollen (z. Dokumentation).