c#身份:如何在UserStore中查找和更新不同身份的声明?

时间:2016-08-16 19:21:44

标签: c# asp.net-identity google-oauth claims-based-identity

我可以使用以下代码存储用户访问令牌,以便以后在我现有的数据库中使用:

// 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时,Principal将拥有该声明。角色将通过构造函数中传递的Identity公开,但不会由Identity实际拥有。 RolePrincipal存在类似的逻辑。

我认为问题与令牌在60分钟后到期后登录有关。我相信这个场景是"现在登录的身份与新生成的访问令牌"没有使用旧访问令牌与#34;原始身份相关联,因此它不会让我更新用户的原始声明。身份和原则不一样。

是否可以将身份链接起来或以另一种(更简单的方式)更新声明?我怎么能做到这一点?请帮助,谢谢。

2 个答案:

答案 0 :(得分:1)

看看这是否有效 https://stackoverflow.com/a/24591892/4651116

更多下面有一个扩展代码,请看

答案 1 :(得分:0)

改为使用变通方法。当所有其他方法都失败时,您可以手动查询和更新数据库!

BLAH到"不想要的"变通...