Behandeln des abgelaufenen Zugriffstokens im asp.net-Core mithilfe des Aktualisierungstokens mit OpenId Connect

8

Ich habe einen ASOS OpenIdConnect Server mit und eine asp.net Core mvc App konfiguriert, die die "Microsoft.AspNetCore.Authentication.OpenIdConnect": "1.0.0 und" Microsoft.AspNetCore.Authentication.Cookies ":" 1.0 verwendet. 0 ". Ich habe den" Authorization Code "Workflow getestet und alles funktioniert.

Die Client-Webanwendung verarbeitet die Authentifizierung wie erwartet und erstellt ein Cookie, in dem das id_token, access_token und refresh_token gespeichert sind.

Wie erzwinge ich Microsoft.AspNetCore.Authentication.OpenIdConnect, um ein neues access_token anzufordern, wenn es abläuft?

Die asp.net Core mvc App ignoriert das abgelaufene access_token.

Ich möchte, dass openidconnect das abgelaufene access_token sieht, dann mache ich einen Aufruf mit dem Refresh-Token, um ein neues access_token zu erhalten. Es sollte auch die Cookie-Werte aktualisieren. Wenn die Aktualisierungstokenanforderung fehlschlägt, würde ich erwarten, dass openidconnect den Cookie "abmeldet" (entferne ihn oder so).

%Vor%     
longday 13.10.2016, 23:55
quelle

2 Antworten

10

Es scheint, dass es in der openidconnect-Authentifizierung für asp.net core keine Programmierung gibt, um das access_token auf dem Server nach dem Empfang zu verwalten.

Ich habe festgestellt, dass ich das Cookie-Validierungsereignis abfangen und überprüfen kann, ob das Zugriffstoken abgelaufen ist. Wenn dies der Fall ist, führen Sie einen manuellen HTTP-Aufruf an den Token-Endpunkt mit dem Befehl grant_type = refresh_token.

Durch Aufruf von context.ShouldRenew = true; Dadurch wird der Cookie aktualisiert und in der Antwort zurück an den Client gesendet.

Ich habe die Grundlage dessen, was ich getan habe, bereitgestellt und werde daran arbeiten, diese Antwort zu aktualisieren, sobald alle Arbeit erledigt ist.

%Vor%     
longday 18.10.2016, 20:12
quelle
1

Sie müssen die Generierung von refresh_token aktivieren, indem Sie in startup.cs:

festlegen
  • Festlegen von Werten für AuthorizationEndpointPath="/ connect / authorize"; // benötigt für refreshtoken
  • Setzen von Werten auf TokenEndpointPath="/ connect / token"; // Standard-Token-Endpunktname

Vergewissern Sie sich in Ihrem Token-Provider, bevor Sie die Token-Anforderung am Ende der HandleTokenrequest-Methode validieren, dass Sie den Offline-Bereich festgelegt haben:

%Vor%

Wenn dies richtig eingerichtet ist, sollten Sie ein refresh_token erhalten, wenn Sie sich mit einem Passwort grant_type anmelden.

Dann müssen Sie von Ihrem Kunden die folgende Anfrage stellen (ich benutze Aurelia):

%Vor%

und das ist es, stellen Sie sicher, dass Ihr Authentifizierungsanbieter in HandleRequestToken nicht versucht, die Anfrage vom Typ refresh_token zu manipulieren:

%Vor%

Das refresh_token soll nur diese Methode durchlaufen können und wird von einer anderen Middleware behandelt, die refresh_token behandelt.

Wenn Sie mehr über das, was der Auth-Server tut, wissen wollen, können Sie sich den Code des OpenIdConnectServerHandler ansehen:

Ссылка

Auf der Client-Seite müssen Sie auch in der Lage sein, die automatische Aktualisierung des Tokens zu handhaben. Hier ist ein Beispiel für einen http-Interceptor für Angular 1.X, wo man 401 Responses behandelt, das Token aktualisiert und dann die Anfrage wiederholt:

%Vor%

Und hier ist ein Beispiel, das ich gerade für Aurelia gemacht habe: Dieses Mal habe ich meinen http-Client in einen HTTP-Handler eingepackt, der überprüft, ob das Token abgelaufen ist oder nicht. Wenn es abgelaufen ist, aktualisiert es zuerst das Token und führt dann die Anfrage aus. Es verwendet ein Versprechen, die Schnittstelle mit den clientseitigen Datendiensten konsistent zu halten. Dieser Handler stellt die gleiche Schnittstelle wie der aurelia-fetch-Client zur Verfügung.

%Vor%

Für jQuery können Sie eine jQuery oAuth aussehen:

Ссылка

Hoffe, das hilft.

    
Darxtar 16.10.2016 02:24
quelle