我可以使用以下代码存储用户访问令牌,以便以后在我现有的数据库中使用:
// 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;原始身份相关联,因此它不会让我更新用户的原始声明。身份和原则不一样。
是否可以将身份链接起来或以另一种(更简单的方式)更新声明?我怎么能做到这一点?请帮助,谢谢。
答案 0 :(得分:1)
看看这是否有效 https://stackoverflow.com/a/24591892/4651116
更多下面有一个扩展代码,请看
答案 1 :(得分:0)
改为使用变通方法。当所有其他方法都失败时,您可以手动查询和更新数据库!
BLAH到"不想要的"变通...