如何修改.net核心中从WS-FED收到的访问令牌的声明?

时间:2018-07-03 12:43:15

标签: authentication asp.net-core authorization ws-federation claims

我能够存储用户的访问令牌。

// This works - Will use access token for API calls later.
claims = new List<Claim>()
      {
        new Claim(Constants.ClaimType.NewAccessToken, accessToken.access_token),
        new Claim(Constants.ClaimType.NewExpiresIn, expireIn.ToString())
      };
context.Principal.AddIdentity(new ClaimsIdentity(claims, ,
                context.Principal.Identity.AuthenticationType));

问题是,当访问令牌过期时,将从ws-fed中检索到新的访问令牌,我找不到在用户原始声明中更新此值的方法。

//这不起作用。生成有关所有权/授权的身份错误。

var user = User as ClaimsPrincipal;
var identity = user.Identity as ClaimsIdentity;
var oldRefreshToken = user.Claims.Single(a => a.Type == Constants.ClaimType.AccessToken);
    identity.RemoveClaim(oldRefreshToken);

错误:无法删除声明access_token:XXXX。它不是此标识的一部分,或者是包含此标识的委托人拥有的声明。例如,当创建具有角色的GenericPrincipal时,Principal将拥有Claim。角色将通过构造函数中传递的身份公开,但实际上不是身份所有。对于RolePrincipal也存在类似的逻辑。

是否可以通过另一种(更简便的方式)链接身份或更新声明,而无需注销并再次登录?我该怎么做?请帮助,谢谢。

0 个答案:

没有答案