【问题标题】:Spring oauth2 - authorization code deleted after consumedSpring oauth2 - 消费后删除授权码
【发布时间】:2015-01-24 20:35:49
【问题描述】:

也许我误解了授权码授予类型,但我认为在发布代码后,spring 将永远保留数据库中的 oauth_code 表中的代码,直到它被用户撤销,但代码在它被删除后立即被删除消费(第一次用这个换代币),

那么这里的流程是什么 - 我的客户是否应该保留刷新令牌以便稍后(或当用户离线时)获取访问令牌

规范说刷新令牌的返回是可选的

授权服务器验证客户端,验证 授权码,并确保重定向 URI 收到的匹配用于重定向客户端的 URI 步骤 (C)。如果有效,授权服务器会回复 访问令牌和可选的刷新令牌。

所以授权服务器决定不提供刷新令牌,客户端无法离线请求访问令牌,他们需要重新完成授权代码过程?

谢谢 什洛米

【问题讨论】:

    标签: spring-security oauth-2.0


    【解决方案1】:

    授权码只能使用一次,并且必须有很短的生命周期。如果您阅读规范的第 4.1.2 节,它会说

    授权码必须过期 在发布后不久,以减轻泄漏的风险。一种 10 分钟的最大授权代码生命周期是 推荐。

    因此,一旦使用了代码,就没有真正的理由保留它(除非可能检测到进一步使用它的尝试)。

    刷新令牌允许客户端获取另一个访问令牌。否则如你所说,需要重新执行授权码流程从头获取一个,这需要资源所有者(用户)的交互。通常系统会设置为是否向该客户端发出刷新令牌,具体取决于它是否需要离线访问资源,或者资源所有者(用户)是否总是直接与它交互。

    【讨论】:

    • 谢谢,现在我看到刷新令牌也有过期时间(比访问时间长但仍然),所以我们说需要离线访问 - 客户端总是会再次通过授权请求。现在因为提供商可能保留以前的批准,这将是透明的?
    • 访问令牌和刷新令牌的到期时间是可配置的,因此您可以将其设置为合适的值。没有什么可以阻止客户端管理令牌,以便它在刷新令牌过期之前请求一个新令牌。如果存储了批准,则用户不必重新批准相同的授权(除非您这样做)。一般来说,他们还可以控制以前的批准,并且可以根据需要将其删除。
    • 只是仔细检查一下,我理解你的意思——我们需要这个来离线访问。假设刷新令牌在一周内到期,那么客户端将需要通过身份验证代码流(需要用户登录)并且用户不在那里。所以你说客户端应该每天(例如)要求刷新令牌以避免其完全过期?
    • 客户端不会“要求刷新令牌”。他们使用一个来请求新的访问令牌,并可能在此过程中收到新的替换刷新令牌。刷新令牌的生命周期通常会更长,但是您可以选择有意义的东西。例如,如果您知道客户端每天需要访问一次,您可以让您的访问令牌有效期为一天,并且刷新令牌每周到期。
    • 这与您的原始问题并没有直接关系,并且 SO cmets 并不足以充分描述新问题。如果您认为存在错误,那么您应该在项目的问题跟踪器中报告它。要么这样,要么把另一个问题放在一起,清楚地说明你做了什么,提供你的配置并解释发生了什么。
    猜你喜欢
    • 2023-04-01
    • 2021-04-24
    • 2017-08-31
    • 2015-03-31
    • 2014-05-10
    • 2013-12-01
    • 1970-01-01
    • 2022-08-04
    • 1970-01-01
    相关资源
    最近更新 更多