在Windows Identity Framework(WIF)中,您可以实施ClaimsAuthenticationManager
以修改对委托人的声明或向其添加新声明。
声明身份验证管理器在应用程序的声明处理管道中提供了一个可扩展点,您可以使用该点来验证,过滤,修改,传入声明或将新声明注入ClaimPrincipal在执行RP应用程序代码之前提出的声明集中
ASP.net Identity 2是否有这样的管道钩子?如果我想添加一些声明而不将它们保存在AspNetUserClaims表中,我该怎么办呢?
答案 0 :(得分:4)
执行此操作的合理位置将在用户成功登录后立即生效。这将在AccountController
登录操作中发生:
public async Task<ActionResult> Login(LoginViewModel model, string returnUrl)
{
if (!ModelState.IsValid) { return View(model); }
var result = await SignInManager.PasswordSignInAsync(model.Email, model.Password, model.RememberMe, shouldLockout: false);
switch (result)
{
case SignInStatus.Success:
// Transform here
var freshClaims = new List<Claim>
{
new Claim(ClaimTypes.Email, model.Email),
new Claim(ClaimTypes.Locality, "Earth (Milky Way)"),
new Claim(ClaimTypes.Role, "Trooper"),
new Claim(ClaimTypes.SerialNumber, "555666777")
};
AuthenticationManager.AuthenticationResponseGrant.Identity.AddClaims(freshClaims);
return RedirectToLocal(returnUrl);
我使用DI将AuthenticationManager
注入AccountControllers
构造函数,并将其设置为AccountController
的属性。如果您不这样做,那么您可以将其从OWIN
上下文中删除:
var authManager = HttpContext.Current.GetOwinContext().Authentication;
authManager.AuthenticationResponseGrant.Identity.AddClaims(freshClaims);