【问题标题】:identity server - get updated claims with refresh token身份服务器 - 使用刷新令牌获取更新的声明
【发布时间】:2018-05-15 22:53:05
【问题描述】:

我在登录时来自 DB 的访问令牌中添加了一些声明(例如 entity_idrole)。现在在某个阶段,entity_id 声明已更改,我需要使用更新后的声明获取新的访问令牌。我正在使用刷新令牌来获取新的访问令牌,但它内部带有相同的旧声明;可能是因为在刷新令牌的情况下没有调用实现IResourceOwnerPasswordValidator 的类。那么如何在访问令牌中获取更新的声明?因为用户必须注销并重新登录才能更新 entity_idrole 声明。

我知道另一种选择是使用/userinfo 端点进行声明,但我的问题是在这种情况下,ASP.NET Core 的[Authorize(Roles = "Manager")] 属性将如何工作并了解角色如果他们不这样做'在访问令牌中不存在?

【问题讨论】:

    标签: asp.net-core identityserver4


    【解决方案1】:

    或者换一种说法 - 经常变化的数据不适合在令牌中声明。

    也就是说 - 您可以让 identityserver 在获取刷新的令牌时再次通过配置文件服务管道运行 - 请参见此处:

    https://identityserver4.readthedocs.io/en/release/reference/client.html?highlight=UpdateAccessTokenClaimsOnRefresh

    【讨论】:

    • 好的,我也这样做了,我让 IdentityServer 通过配置文件服务管道运行,但现在的问题是,在 /token 端点获取访问令牌时,正在调用 ProfileService 的 GetProfileDataAsync 方法进行双 DB 往返的 ResourceOwnerPasswordValidator 类的 ValidateAsync 方法。我怎样才能让它在请求访问令牌时只调用 ValidateAsync 而在刷新令牌的情况下只调用 GetProfileDataAsync?
    • GetProfileData 总是为初始请求调用。现在它也被额外调用以用于刷新请求。这就是你付出的代价。
    • 好的,知道了。非常感谢。
    • 这个答案的链接坏了
    猜你喜欢
    • 2015-10-01
    • 1970-01-01
    • 2020-08-21
    • 2020-08-05
    • 2019-09-28
    • 2020-01-16
    • 1970-01-01
    • 1970-01-01
    • 2016-09-30
    相关资源
    最近更新 更多