【问题标题】:c# identity: howto find and update different identity's claims in UserStore?c# 身份:如何在 UserStore 中查找和更新不同身份的声明?
【发布时间】: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


    【解决方案1】:

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

    下面还有扩展码,看

    【讨论】:

    • 我复制了扩展方法,但它们不起作用。它在“var claim = userManager.GetClaims(user.Id); 这是函数 RemoveClaim();”的行上出错。它返回空值。用户的声明肯定存在,因为我可以在 AspNetUserClaims 表中看到它们。
    【解决方案2】:

    改为使用解决方法。当一切都失败时,您可以手动查询和更新数据库!

    BLAH 到“不需要的”解决方法...

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-07-31
      • 2018-07-30
      • 2022-01-22
      • 2017-06-17
      • 2021-08-26
      • 2016-03-01
      • 2013-11-11
      • 2016-07-31
      相关资源
      最近更新 更多