本文介绍了如何更新ASP.NET身份索赔?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我使用OWIN验证我的MVC5项目。
这是我的 SignInAsync

I'm using OWIN authentication for my MVC5 project.This is my SignInAsync

 private async Task SignInAsync(ApplicationUser user, bool isPersistent)
        {
            var AccountNo = "101";
            AuthenticationManager.SignOut(DefaultAuthenticationTypes.ExternalCookie);
            var identity = await UserManager.CreateIdentityAsync(user, DefaultAuthenticationTypes.ApplicationCookie);
            identity.AddClaim(new Claim(ClaimTypes.UserData, AccountNo));
            AuthenticationManager.SignIn(new AuthenticationProperties() { IsPersistent = isPersistent, RedirectUri="Account/Index"}, identity);
        }

正如你所看到的,我加入 AccountNo 进入索赔清单。

现在,我怎么能更新这个要求在我的应用程序的一些问题?到目前为止,我有这样的:

Now, how can I update this Claim at some point in my application? So far, i have this:

 public string AccountNo
        {

            get
            {
                var CP = ClaimsPrincipal.Current.Identities.First();
                var Account= CP.Claims.FirstOrDefault(p => p.Type == ClaimTypes.UserData);
                return Account.Value;
            }
            set
            {
                var CP = ClaimsPrincipal.Current.Identities.First();
                var AccountNo= CP.Claims.FirstOrDefault(p => p.Type == ClaimTypes.UserData).Value;
                CP.RemoveClaim(new Claim(ClaimTypes.UserData,AccountNo));
                CP.AddClaim(new Claim(ClaimTypes.UserData, value));
            }

        }

当我尝试删除了这一说法,我得到这个异​​常:

when i try to remove the claim, I get this exception:

该索赔
  :
  101'是不能被去除。它可以是不这部分
  身份或它是由包含主要拥有的权利要求
  这个身份。例如,校长将自己的索赔时
  创建具有一个角色的GenericPrincipal。该角色将被曝光
  通过身份是在构造函数中通过,但不
  实际上是由身份拥有。类似的逻辑存在一个
  RolePrincipal。

有人能帮助我弄清楚如何更新索赔?

Could someone help me figure out how to update the Claim?

推荐答案

找到哪里出了问题,你需要创建ClaimsIdentity的一个实例,然后再做选择更新索赔

Found where it went wrong, you need to create an instance of ClaimsIdentity and then do the claims updation.

        set
        {
            var AuthenticationManager = HttpContext.GetOwinContext().Authentication;
            var Identity = new ClaimsIdentity(User.Identity);
            Identity.RemoveClaim(Identity.FindFirst("AccountNo"));
            Identity.AddClaim(new Claim("AccountNo", value));
            AuthenticationManager.AuthenticationResponseGrant = new AuthenticationResponseGrant
(new ClaimsPrincipal(Identity), new AuthenticationProperties { IsPersistent = true });


        }

这篇关于如何更新ASP.NET身份索赔?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

10-29 01:04