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

时间:2015-04-20 13:36:39

标签: c# asp.net-mvc claims-based-identity asp.net-identity-2

在Windows Identity Framework(WIF)中,您可以实施ClaimsAuthenticationManager以修改对委托人的声明或向其添加新声明。

  

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

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

1 个答案:

答案 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);