【发布时间】:2016-12-23 07:12:32
【问题描述】:
我可以使用以下代码存储用户的访问令牌以供以后在我现有的数据库中使用:
// This works - Will use access token for API calls later.
dbIdentity.AddClaim(new Claim("GoogleAccessToken", accessToken));
问题是 当访问令牌过期从 Google 检索到一个新的访问令牌(我可以获取并读取它的值),但我找不到方法更新用户原始声明中的此值,更不用说删除用户原始声明的声明了。
// This DOES NOT work. Identity error about ownership/authorization is generated.
dbIdentity.RemoveClaim(claimsIdentity.FindFirst("GoogleAccessToken"));
错误:无法删除声明“”。它要么不是此身份的一部分,要么是包含此身份的委托人拥有的声明。例如,在创建具有角色的 GenericPrincipal 时,委托人将拥有声明。这些角色将通过在构造函数中传递的 Identity 公开,但实际上并不由 Identity 拥有。 RolePrincipal 也存在类似的逻辑。
我认为问题与令牌在 60 分钟后过期后登录有关。我相信这种情况是“现在使用新生成的访问令牌登录的身份”没有链接到“使用旧访问令牌的原始身份”,所以它不允许我更新用户的原始声明。身份和主体不一样。
是否可以以另一种(更简单的)方式链接身份或更新声明?我怎样才能做到这一点?请帮忙,谢谢。
【问题讨论】:
标签: c# asp.net-identity google-oauth claims-based-identity