我能够存储用户的访问令牌。
// 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也存在类似的逻辑。
是否可以通过另一种(更简便的方式)链接身份或更新声明,而无需注销并再次登录?我该怎么做?请帮助,谢谢。