我可以使用下面的代码存储一个用户的访问令牌,以便以后在我已经存在的数据库中使用:
// 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分钟后令牌过期后登录有关。我认为这种情况是"现在使用新生成的访问令牌登录的身份"没有链接到"使用旧访问令牌的原始身份",因此它不允许我更新用户的原始声明。身份和主体不相同。
是否有可能以另一种(更容易)的方式连接身份或更新声明?我怎么才能做到呢?请帮忙,谢谢。
看看这是否有效https://stackoverflow.com/a/24591892/4651116
下面有一个扩展代码,看
使用了变通方法。当所有这些都失败时,您可以手动查询和更新数据库!