2017-03-06 5 views
0

Gibt es eine Möglichkeit, den Benutzernamen in einer ASP NET Core-Anwendung über Middleware festzulegen?ASP NET Core: Überschreiben Benutzername von HttpContext

Ich habe eine AnonymousUserMiddleware:

public AnonymousUserMiddleware(RequestDelegate next, HttpContextCurrentClaimsPrincipalAccessor currentClaimsPrincipalAccessor, ILogger<AnonymousUserMiddleware> logger) 
    { 
     _next = next; 
     _currentClaimsPrincipalAccessor = currentClaimsPrincipalAccessor; 
     _logger = logger; 
    } 

    public async Task Invoke(HttpContext context) 
    { 
     try 
     { 
      _currentClaimsPrincipalAccessor?.Current?.Identity?.Name = "anonymous"; 
      await _next.Invoke(context); 
     } 
     catch (Exception ex) 
     { 
      _logger.LogError(1, ex, "Exception"); 
      throw ex; 
     } 
    } 

Aber das funktioniert nicht, weil Name ein Nur-Lese-Feld ist.

Ich möchte dies in der Startup.cs im Developer-Modus aufrufen, so dass der Benutzername während einer Anfrage immer "anonym" ist.

Gibt es eine Möglichkeit, dies zu erreichen?

Antwort

1

Sie können Ihr eigenes ClaimsPrincipal erstellen und die Instanz dem HttpContext zuweisen. Zum Beispiel:

public async Task Invoke(HttpContext context) 
{ 
    try 
    { 
     var identity = new ClaimsIdentity(); 
     identity.AddClaim(new Claim("http://schemas.xmlsoap.org/ws/2005/05/identity/claims/name", "anonymous", "http://www.w3.org/2001/XMLSchema#string")); 

     var principal = new ClaimsPrincipal(); 
     principal.AddIdentity(identity); 

     context.User = principal; 

     await _next.Invoke(context); 
    } 
    catch (Exception ex) 
    { 
     _logger.LogError(1, ex, "Exception"); 
     throw ex; 
    } 
} 
Verwandte Themen