Frage Dynamische Benutzeransprüche in ASP.NET Identity EF


Ich arbeite an einem Authentifizierungssystem, das ASP.NET Identity mit Entity Framework verwendet, und ich möchte einige Ansprüche haben, bei denen es sich um berechnete Werte handelt, anstatt in die Anspruchstabelle fest codiert zu sein.

Wie kann ich, wenn sich ein Benutzer anmeldet, dynamische Ansprüche zu dieser Anmeldesitzung hinzufügen, ohne sie tatsächlich der Anspruchstabelle hinzuzufügen?

Zum Beispiel möchte ich vielleicht das DOB eines jeden Benutzers speichern, aber ich möchte IsBirthday als einen Anspruch hinzufügen, wenn das Anmeldedatum mit dem DOB des Benutzers übereinstimmt. Ich möchte nicht für jeden Benutzer einen "IsBirthday" -Anspruch speichern müssen, da dieser täglich für alle geändert wird.

In meinem Code benutze ich dies um mich einzuloggen:

var signInResult = await SignInManager.PasswordSignInAsync(username, password, false, false);

Nachdem dies aufgerufen wurde, kann ich auf das ClaimsPrincipal verweisen, aber die Claims-Eigenschaft ist eine IEnumerable, keine List, daher kann ich sie nicht hinzufügen.

BEARBEITEN: Ich sollte auch erwähnen, dass ich die Microsoft.AspNet.Identity.Owin-Bibliotheken verwende.


6
2017-12-08 21:51


Ursprung


Antworten:


OK, alle, ich habe ein wenig nach den Klassen gesucht, die in ASP.NET Identity zur Verfügung gestellt wurden, und ich habe die gefunden, die ich außer Kraft setzen musste. Die SignInManager-Klasse verfügt über eine CreateUserIdentityAsync-Methode, die genau das tut, was ich wollte. Der folgende Code hat den IsBirthday-Anspruch meiner Identität hinzugefügt, aber nicht in der Datenbank gespeichert.

public class ApplicationSignInManager : SignInManager<ApplicationUser, string>
{
  public override async Task<System.Security.Claims.ClaimsIdentity> CreateUserIdentityAsync(ApplicationUser user)
  {
      var identity = await base.CreateUserIdentityAsync(user);
      identity.AddClaim(new System.Security.Claims.Claim("IsBirthday", user.DOB.GetShortDateString() == DateTime.Now.GetShortDateString()));
      return identity;
  }

  // ... EXCLUDING OTHER STUFF LIKE CONSTRUCTOR AND OWIN FACTORY METHODS ...
}

11
2017-12-08 23:22