1

Ich habe eine Policy-basierte Autorisierung in .net-Kern-MVC -Anwendung implementiert. Code:Ich muss Wert der Variable, die pro Benutzersitzung in .net Kern unterschiedlich ist

protected override Task HandleRequirementAsync(AuthorizationHandlerContext context, ValidUserAuthorization requirement) 
    { 
     List<KeyValuePair<string, string>> parameters = new List<KeyValuePair<string, string>> 
     { 
      new KeyValuePair<string, string>("UserAlias", context.User.Identity.Name.Split('@')[0]) 
     }; 

     var isAuthorized = this.CubeServiceManager.GetDataFromService("CheckIfAuthorized", "GET", this.ConnectionStrings.BaseAddress, parameters); 



     if (isAuthorized == "true") 
     { 
      context.Succeed(requirement); 
     } 



     return Task.CompletedTask; 
    } 

Ich habe Autorisieren Attribut auf Controllerebene hinzugefügt, die dieses Async Methode jedes Mal aufrufen. Wenn der Wert isAuthorized wahr ist, ist der Benutzer berechtigt. Aber für jeden Aufruf der asynchronen Methode wird ein Serviceaufruf durchgeführt, um den Wert isAuthorized Variable festzulegen, die ich pro Sitzung für jeden Benutzer zwischenspeichern möchte. Wie kann ich es in diesem Autorisierungshandler tun?

+0

Logisch, können Sie das Ergebnis dieses Aufrufs zu Ihrem Dienst nicht zwischenspeichern, wie es kontextuelle ist. Jede Anfrage muss ihre Berechtigung einzeln überprüfen. Andernfalls würde die erste Person, die autorisiert ist, effektiv allen anderen erlauben, ebenfalls autorisiert zu werden, solange der Cache durchgehalten wird. Wenn es als "nicht autorisiert" zwischengespeichert wird, kann niemand autorisiert werden, solange der Cache ausgehalten wird. –

+0

@ChrisPratt Was passiert, wenn ich die Sitzung mit einem Schlüssel verwende, der für jeden Benutzer einzigartig ist? –

+0

Das ist sicherer, aber immer noch ein ähnliches Problem. Abhängig davon, wie lange die Informationen "zwischengespeichert" sind, geben Sie möglicherweise keinen korrekten Authentifizierungsstatus zurück. Im Allgemeinen, wenn Sie über einen Dienst autorisieren, sollten Sie jede Anfrage bearbeiten. Es ist nicht etwas, das Sie jemals zwischenspeichern sollten. –

Antwort

Verwandte Themen