0

Ich verwende Identity Server 4, um Authentifizierung und Autorisierung zu implementieren, damit Benutzer Zugriff auf meine APIs erhalten. Es verwendet OIDC mit Implicit Fluss eine angular2 Client-Anwendung zu authentifizieren:Identity Server: Einen Reset-Passwort-Link mit einem Zugriffstoken senden

   ClientName = "angular2client", 
       ClientId = "angular2client", 
       AccessTokenType = AccessTokenType.Jwt,    
       AllowedGrantTypes = GrantTypes.Implicit, 
       AllowAccessTokensViaBrowser = true, 
       RedirectUris = new List<string> 
       { 
        "http://localhost:5000" //we have to provide https for all the urls 

       }, 
       PostLogoutRedirectUris = new List<string> 
       { 
        "http://localhost:5000/Unauthorized" 
       }, 
       AllowedCorsOrigins = new List<string> 
       { 
        "http://localhost:5000", 

       }, 
       AllowedScopes = new List<string> 
       { 
        "openid", 
        "resourceAPIs" 

       } 

Ich plane, eine Reset-Passwort-Option für Benutzer, indem sie auf ihre E-Mails zu senden Links zur Verfügung zu stellen. In der traditionellen Implementierung würde ich einen Eintrag zu meiner Datenbank mit benutzerdefiniertem Hash, userId und Ablaufzeitraum hinzufügen und diesen Link dann an den Benutzer senden. Wenn er den Link zum Zurücksetzen des Passworts anfordert, validiere ich ihn gegen meine Datenbank und überprüfe, ob dieser Eintrag noch gültig ist.

Momentan besteht meine Lösung aus zwei Servern: Identity Server, Resource Server (APIs) und Angular 2-Anwendung. Benutzer müssen Token abrufen, um auf die Anwendung zugreifen zu können. Anschließend erhalten sie die Berechtigung zum Zugriff auf die APIs. Wenn das Token nicht gültig war, können die APIs nicht aufgerufen werden. Dies ist, wie Ressourcen-Server das Token wird Validieren:

 app.UseIdentityServerAuthentication(new IdentityServerAuthenticationOptions 
     { 
      Authority = "http://localhost:44311", 
      ScopeName = "resourceAPIs", 

      RequireHttpsMetadata = false 
     }); 

Wenn ich das mit Identity Server 4, tun möchten und eine E-Mail-Link mit dem Token senden, die ihm das Passwort ändern API zugreifen können. Welche Änderungen soll ich dem Kunden machen?

Soll ich einen weiteren Client hinzufügen, der Zugriff auf dieses "Reset Password API" hat, um zu verhindern, dass er dasselbe Token für den Zugriff auf die Ressourcen-APIs verwendet. Was sind die besten Praktiken bei einer solchen Implementierung?

Antwort

0

Wie bei Identity Server 3 ist das Zurücksetzen des Kennworts nicht Aufgabe des Identitätsservers. Sie sollten sich auf das zugrunde liegende Mitgliedschaftsanbietersystem (asp.net identity oder mainiaryreboot) verlassen, um das Passwort zurückzusetzen. Übrigens, Sie können die Reset-Bildschirme im Identity Server-Host hosten.

Verwandte Themen