2017-07-11 3 views
3

Ich bin bereit, Asp.Net-Core zu verwenden, aber hier ist, was ich tue. In MVC 5 habe ich ein Http-Modul, das das PostAuthenticate-Ereignis behandelt, um den Anspruch zu erstellen, wo ich einige Sachen mache, um Rollen für den Benutzer zu bestimmen. Ich sehe keine Möglichkeit, das Gleiche in Core zu tun. Beachten Sie, dass dies die Windows-Authentifizierung verwendet, so dass keine Anmeldemethode zur Verfügung steht.müssen Post Authenticate in Asp.Net Core behandeln

Von der aktuellen httpModule, die an die PostAuthenticate hängt, weil ich einige Dinge für den Benutzer initialisieren möchte.
context.PostAuthenticateRequest + = Context_PostAuthenticateRequest;

Beachten Sie, dass httpModules nicht mehr mit Core vorhanden sind und das auf Middleware verschoben wird. Ich sehe nicht, wie man in diesem Ereignis von dort jedoch anzapfen.

Antwort

0

Die Windows-Authentifizierung wird von den Hosts (IIS oder HttpSys/WebListener) am Anfang Ihrer Anwendungspipeline ausgeführt. Die erste Middleware in Ihrer Pipeline entspricht in diesem Fall PostAuthenticateRequest. Arbeiten Sie mit HttpContext.User, so wie Sie es für richtig halten.

1

Ich habe das heute zum ersten Mal gemacht. Zwei grundlegende Schritte hier.

Erstes: Erstellen Sie eine Klasse, die die IClaimsTransformer-Schnittstelle implementiert.

public class MyTransformer : IClaimsTransformer 
{ 
    public Task<ClaimsPrincipal> TransformAsync(ClaimsTransformationContext context) 
    { 
     //don't run if user isn't logged in 
     if(context.Principal.Identity.IsAuthenticated) 
     { 
      ((ClaimsIdentity)context.Principal.Identity)?.AddClaims(...); 
     } 
    } 
    return Task.FromResult(context.Principal); 
} 

Zweitens: diese Zeile Startup.cs hinzufügen in

public void Configure(IApplicationBuilder app, ..., ...) 
{ 
    //app.Use...Authentication stuff above, for example 
    app.UseOpenIdConnectAuthentication(new OpenIdOptions 
    { 
     //or however you like to do this. 
    }); 

    app.UseClaimsTransformation(o => new MyTransformer().TransformAsync(o)); 
    //UseMvc below 
    app.UseMvc(...); 
} 

Beachten Sie, dass TransformAsync bei jeder Anfrage ausgeführt wird, so dass Sie möglicherweise in Verwendung Sitzungen oder Caching aussehen soll, wenn Sie treffen eine Datenbank damit.

+0

Haben Sie bemerkt, dass der Transformator bei jeder Anfrage aufgerufen wird? Ich möchte es nach der Anmeldung oder nur auf Anfrage nennen. In der alten .net gab es ein OpenIdConnectAuthenticationOptions.OpenIdConnectAuthenticationNotifications.SecurityTokenValidated ... und fragte sich, wo es hinging. THanks – Whoever

+0

Ich habe es noch nicht versucht, aber ich habe darüber nachgedacht, die Einstellung OpenIdOptions Event = New OpenIdeConnectEvents {}, aber ich bin nicht sicher, was zu verwenden, oder wenn dies Ansprüche zwischen Anforderungen persistent bleibt. Momentan speichere ich meine serialisierten benutzerdefinierten Ansprüche und speichere sie in den Sitzungsdaten, um zu vermeiden, dass meine Datenbank jemals getroffen wird, wenn eine Anfrage über – stiljack

+0

kommt. Danke für die schnelle Nachverfolgung. Die Verwendung von Sitzungs-var kann möglicherweise Auswirkungen darauf haben, wie Sie eine API-Schnittstelle entwerfen, da einige Informationen von einem Token stammen können. Ich hatte alles mit IdentityServer3 und dem guten alten Netz herausgefunden. Nun, da wir 3 verschiedene Versionen von .NET haben, die nicht mit den nächsten kompatibel sind ... Wir brauchen Bill wirklich wieder an der Spitze. – Whoever