1

Ich versuche, eine Website in ASP.NET Core MVC zu erstellen, und verwende die Microsoft.Identity-Bibliothek. Ich habe eine benutzerdefinierte Eigenschaft in meiner User (ApplicationUser) -Klasse, die Token genannt wird. Ich möchte einen Cookie bei der Anmeldung mit diesem Token erstellen. Also muss ich eine Funktion aufrufen, mit der ich das Attribut Token vom angemeldeten Benutzer holen kann (über UserManager oder was auch immer. Es muss der angemeldete Benutzer sein.)ASP.NET Core MVC benutzerdefinierte Identitätseigenschaften

Ich habe im Internet gesucht und gefunden mehrere Lösungen, indem Sie eine benutzerdefinierte Factory erstellen und dann zur startup.cs Like this hinzufügen. Aber ich kann keine Möglichkeit finden oder sehen, wie ich auf die Immobilie zugreifen kann. User.Identity.GetToken() funktioniert nicht.

Hier ist meine individuelle Fabrik:

public class CustomUserIdentityFactory : UserClaimsPrincipalFactory<User, IdentityRole> 
    { 
     public CustomUserIdentityFactory(UserManager<User> userManager, RoleManager<IdentityRole> roleManager, IOptions<IdentityOptions> optionsAccessor) : base(userManager, roleManager, optionsAccessor) 
     {} 

     public override async Task<ClaimsPrincipal> CreateAsync(User user) { 
      var principal = await base.CreateAsync(user); 

      if(!string.IsNullOrWhiteSpace(user.Token)) { 
       ((ClaimsIdentity)principal.Identity).AddClaims(new[] { 
        new Claim(ClaimTypes.Hash, user.Token) 
       }); 
      } 

      return principal; 
     } 
    } 

Hier ist der configure in meinem Startup.cs

services.AddScoped<IUserClaimsPrincipalFactory<User>, CustomUserIdentityFactory>(); 

So lange Geschichte kurz: Ich habe eine benutzerdefinierte Identität Eigenschaft zuzugreifen versuchen und habe eine gefunden Möglichkeit, es dem UserManager hinzuzufügen, aber keine Möglichkeit finden, darauf zuzugreifen.

+0

Ich habe eine Umgehung, indem Sie den Cookie nach dem Benutzer angemeldet, indem Sie den Benutzer mit '(warten _userManager.GetUserAsync (HttpContext.User)). Token' –

Antwort

2

Ihre "CustomUserIdentityFactory" fügt dem angemeldeten Benutzer Ansprüche hinzu, so dass Ansprüche dem Cookie hinzugefügt werden, auf den unter Verwendung von "User.Claims" durch Angabe Ihres Anspruchstyps zugegriffen werden kann.

Angenommen, Ihre Forderung Typ „http://www.example.com/ws/identity/claims/v1/token

ändern Sie den Code wie unten durch zwingende „CreateAsync“ Methode ist Ihren eigenen Anspruch Typen.

public override async Task<ClaimsPrincipal> CreateAsync(User user) { 
      var principal = await base.CreateAsync(user); 
      var tokenClaimType = "http://www.example.com/ws/identity/claims/v1/token" 

      if(!string.IsNullOrWhiteSpace(user.Token)) { 
       ((ClaimsIdentity)principal.Identity).AddClaims(new[] { 
        new Claim(tokenClaimType, user.Token) 
       }); 
      } 

      return principal; 
     } 

Wie Token als Teil "User.Claims"

var tokenClaimType = "http://www.example.com/ws/identity/claims/v1/token" 
var token = User.Claims.Where(claim => claim.Type == tokenClaimType); 

Hoffnung für den Zugriff auf das hilft.

+0

Es tat, danke! –

Verwandte Themen