IdentityServer 3 aktualisiert Benutzer mit Aktualisierungstoken

9

Wir versuchen, Identity Server 3 richtig einzurichten. Wir haben die Authentifizierung erfolgreich durchgeführt und es ist uns gelungen, das Aktualisierungstoken zu erhalten.

Die Client-Anwendung verwendet Angular.

Nun, wenn das acces_token abläuft, schlagen alle Aufrufe an die Rest-API fehl (wir haben es geschafft, 401 zu bekommen), aber wir fragen uns, wie wir den Benutzer erneut authentifizieren können.

In unseren Tests schlägt jeder API-Aufruf aus Javascript fehl (401), aber sobald die Seite aktualisiert wird, tritt der ganze Mechanismus in Kraft. Wir sehen, dass wir zum Identitätsserver weitergeleitet werden, aber er wird nicht angezeigt Auf der Anmeldeseite werden wir anscheinend mit neuen Tokens zurück zur Client-Anwendung geschickt.

Ich möchte das Zugriffstoken aktualisieren, ohne den Benutzer zum Aktualisieren der Seite zwingen zu müssen.

Was ich nicht sicher bin, ist aber, wessen Verantwortung ist es? Ist das die Client-Anwendung (Website) oder die eckige Anwendung? Mit anderen Worten, sollte die Anwendung dies transparent für Angular handhaben oder sollte eckig etwas tun, wenn sie eine 401 empfängt, in welchem ​​Fall ich mir nicht sicher bin, wie die Information zurück zur Web-App fließen wird.

Irgendwelche Hinweise?

Zusätzliche Informationen: Wir verwenden OpenId Connect

    
Georges Legros 10.12.2015, 13:23
quelle

2 Antworten

4

Ich habe es funktioniert!

Wie ich in den Kommentaren gesagt habe, habe ich dies verwendet Artikel. Der Autor verweist auf eine sehr nette Lib , die ich ebenfalls verwende.

Fakten:

  1. Identity Server 3 fordert das Clientgeheimnis bei der Aktualisierung des Zugriffstokens an
  2. Man sollte refresh_token oder client_secret nicht in der Javascript-Anwendung speichern, da sie als unsicher gelten (siehe der Artikel )

Also habe ich entschieden, das refresh_token als verschlüsseltes Cookie mit dieser Klasse zu senden (gefunden von ST BTW, kann den Link nicht mehr finden, sorry ...)

%Vor%

Die JavaScript-Anwendung erhält den Wert aus dem Cookie. Es löscht dann den Cookie, um zu vermeiden, dass das Ding immer wieder gesendet wird, es ist sinnlos.

Wenn das access_token ungültig wird, sende ich eine http-Anfrage an den Anwendungsserver mit dem verschlüsselten refresh_token. Das ist ein anonymer Anruf.

Der Server kontaktiert den Identitätsserver und erhält ein neues access_token, das zurück an Javascript gesendet wird. Die großartige Bibliothek hat alle anderen Anfragen in die Warteschlange gestellt. Wenn ich also mit meinem neuen Token zurück bin, kann ich sagen, dass es weitergehen soll mit authService.loginConfirmed(); .

Die Aktualisierung ist eigentlich ziemlich einfach, da Sie nur den TokenClient von IdentityServer3 verwenden müssen. Vollständiger Methodencode:

%Vor%

Kommentare sind willkommen, dies ist wahrscheinlich der beste Weg, dies zu tun.

    
Georges Legros 15.12.2015, 16:15
quelle
0

Zukünftige Referenz: Die Verwendung von Aktualisierungstoken in einer eckigen Anwendung (oder einer anderen JS-Anwendung) ist nicht die richtige Methode, da ein Aktualisierungstoken zu empfindlich ist, um im Browser gespeichert zu werden. Sie sollten eine stille Verlängerung basierend auf dem Identityserver-Cookie verwenden, um ein neues Zugriffstoken zu erhalten. Siehe auch die JavaScript-Bibliothek oidc-client-js , da dies die automatische Verlängerung für Sie verwalten kann.

    
stombeur 30.05.2017 09:06
quelle