【问题标题】:AspNet.Security.OpenIdConnect.Server. Refresh tokensAspNet.Security.OpenIdConnect.Server。刷新令牌
【发布时间】:2016-06-14 22:54:40
【问题描述】:

据我所知,ASOS 支持开箱即用的刷新令牌。要获取刷新令牌,我需要将 offline_access 范围添加到我的令牌请求中。但是它们存储在哪里?如何更改令牌的到期日期或将其删除?如何确定为哪个用户创建刷新令牌?

【问题讨论】:

    标签: c# oauth-2.0 asp.net-core owin aspnet-contrib


    【解决方案1】:

    但是它们存储在哪里?

    默认情况下,它们不存储在任何地方:它们是独立的。只要用于保护刷新令牌的加密密钥仍在 ASP.NET 数据保护密钥环中,它们就可以被 ASOS 解密并用于颁发新的访问令牌。


    如何更改令牌的到期日期?

    可以使用RefreshTokenLifetime 属性从选项中全局设置默认到期日期。如果您不提供自己的寿命,则有效期为 14 天。

    请注意,默认情况下也启用了滑动过期,这意味着您每次发出新的grant_type=refresh_token 请求时都会获得一个新的刷新令牌(有效期为 14 天)。您可以通过将UseSlidingExpiration 设置为false 来禁用滑动过期。


    ...还是删除它?

    由于刷新令牌是独立的,因此您无法删除它们。您当然可以考虑通过覆盖SerializeRefreshTokenDeserializeRefreshToken 事件来使用自定义令牌(例如与数据库中的条目相对应的唯一字符串),但推荐的方法是在接收刷新令牌请求时简单地将它们视为无效。

    为此,如果您认为 refresh_token 已被撤销且不能用于发行新令牌,您可以覆盖 HandleTokenRequest 事件并调用 context.Reject()


    如何确定为哪个用户创建刷新令牌?

    刷新令牌包含您在创建原始身份验证票证时添加的所有声明,因此如果您添加与用户标识符对应的 sub 声明,您可以使用它从数据库。

    【讨论】:

    • 谢谢。但是我们对令牌过期有一个误解。如何更改一个已生成的具体令牌的到期日期?或者我应该使用GrantRefreshTokenGrant 方法使其无效&如果你告诉我方法我会很高兴,我怎么能禁止用户。 manager.SupportsUserSecurityStamp 是什么?我该如何使用它?实际上我需要给用户令牌并立即使令牌无效(立即禁止用户)。
    • 您无法更改已发布的刷新令牌的到期日期(它在令牌内进行硬编码),但正如您所了解的,您可以使用GrantRefreshTokenGrant 添加您自己的逻辑确定刷新令牌是否仍然有效。如果用户被禁止,您可以致电context.Rejected() 拒绝刷新令牌请求。
    • 据我了解,我需要在我的用户模型中添加字段Banned并在GrantRefreshTokenGrant 中检查它然后拒绝令牌?如果我使用这种方法,我将无法立即禁止用户或添加新的声明。有没有办法检查每个请求的访问令牌?也许我应该在AuthorizationEndpoint 做?
    • 是的,这就是想法(和推荐的方法)。如果您需要使用访问令牌(而不是刷新令牌)支持此类功能,则需要在 JWT 不记名中间件级别 (app.UseJwtBearerAuthentication()) 执行此操作,因为这是堆栈验证访问令牌的地方。
    • 抱歉,我不知道如何在app.UseJwtBearerAuthentication() 中进行操作。你能给我建议吗,在哪里做?
    猜你喜欢
    • 2021-08-20
    • 2018-09-21
    • 2022-10-31
    • 2016-01-05
    • 2019-06-29
    • 2016-01-28
    • 1970-01-01
    • 2020-07-12
    • 2017-11-20
    相关资源
    最近更新 更多