Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spring security Spring oauth2-使用后删除授权代码_Spring Security_Oauth 2.0 - Fatal编程技术网

Spring security Spring oauth2-使用后删除授权代码

Spring security Spring oauth2-使用后删除授权代码,spring-security,oauth-2.0,Spring Security,Oauth 2.0,也许我误解了授权代码的授予类型,但我认为在发出代码spring后,它会将代码永远保存在数据库中的oauth_代码表中,直到用户将其撤销,但代码在使用后立即被删除(第一次将此代码交换为令牌) 那么这里的流程是什么呢?我的客户端是否应该保留刷新令牌,以便稍后(或当用户脱机时)获取访问令牌 规范说,返回刷新令牌是可选的 授权服务器验证客户端,验证 授权代码,并确保重定向URI received与中用于重定向客户端的URI匹配 步骤(C)。如果有效,授权服务器将使用 访问令牌和(可选)刷新令牌 因此,授

也许我误解了授权代码的授予类型,但我认为在发出代码spring后,它会将代码永远保存在数据库中的oauth_代码表中,直到用户将其撤销,但代码在使用后立即被删除(第一次将此代码交换为令牌)

那么这里的流程是什么呢?我的客户端是否应该保留刷新令牌,以便稍后(或当用户脱机时)获取访问令牌

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

授权服务器验证客户端,验证 授权代码,并确保重定向URI received与中用于重定向客户端的URI匹配 步骤(C)。如果有效,授权服务器将使用 访问令牌和(可选)刷新令牌

因此,授权服务器是否决定不提供刷新令牌客户端无法脱机请求访问令牌,他们需要重新执行授权代码过程

谢谢
Shlomi

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

授权码必须过期 发布后不久,将降低泄漏风险。A. 授权代码的最长生存期为10分钟 推荐的

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


刷新令牌允许客户端获取另一个访问令牌。否则,正如您所说,它需要重新执行授权代码流以从头开始,这需要资源所有者(用户)的交互。通常,系统会被设置为向该客户端发出刷新令牌或不向该客户端发出刷新令牌,这取决于该客户端是否确实需要脱机访问资源,或者资源所有者(用户)是否总是直接与其交互。

谢谢,现在我看到刷新令牌也有过期时间(比访问时间长,但仍然有效),所以我们说,如果需要脱机访问,客户端将始终再次通过授权请求。现在,由于提供商可能保留以前的批准,这将是透明的?访问令牌和刷新令牌的过期时间都是可配置的,因此您可以将其设置为合适的时间。没有什么可以阻止客户端管理令牌,以便在刷新令牌过期之前请求新令牌。如果已存储批准,则用户不必重新批准相同的授权(除非您允许)。一般来说,他们还可以控制以前的批准,如果他们愿意,可以删除它们。只需再次检查我了解你-我们需要这个离线访问。假设刷新令牌在一周内过期,那么客户端将需要通过身份验证代码流(需要用户登录),而用户不在那里。所以你说客户端应该每天请求刷新令牌(例如)以避免其完全过期?客户端不会“请求刷新令牌”。他们使用一个令牌来请求新的访问令牌,并可能在该过程中接收新的替换刷新令牌。刷新令牌的生命周期通常要长得多,但是由您选择有意义的内容。例如,如果您知道客户端每天需要访问一次,您可以使您的访问令牌有效一天,刷新令牌每周过期。这实际上与您的原始问题没有直接关系,因此注释的大小不足以充分描述新问题。如果您认为存在bug,那么您应该在项目的问题跟踪程序中报告它。或者把另一个问题放在一起,清楚地说明你做了什么,提供你的配置并解释发生了什么。