转换/修改asp.net标识中的声明2

在Windows Identity Framework(WIF)中,您可以实现一个ClaimsAuthenticationManager ,以修改对主体的声明或向其添加新声明。

声明身份validation管理器在应用程序的声明处理管道中提供了一个可扩展点,您可以使用该点来validation,过滤,修改,传入声明或在执行RP应用程序代码之前将新声明注入ClaimsPrincipal提出的声明集中。

ASP.net Identity 2是否有这样的管道钩子? 如果我想添加一些声明而不将它们保存在AspNetUserClaims表中,我该怎么做?

在用户成功登录后,这样做的逻辑位置就是正确的。这将在AccountController登录操作中发生:

  public async Task 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 { 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构造函数并将其设置为AccountControllers的属性。 如果你不这样做,那么你可以从OWIN上下文中取出它:

 var authManager = HttpContext.Current.GetOwinContext().Authentication; authManager.AuthenticationResponseGrant.Identity.AddClaims(freshClaims);