Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/12.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
Java 我是否可以/应该在spring security中对每个请求刷新OAuth2令牌_Java_Spring_Spring Security_Oauth 2.0_Spring Security Oauth2 - Fatal编程技术网

Java 我是否可以/应该在spring security中对每个请求刷新OAuth2令牌

Java 我是否可以/应该在spring security中对每个请求刷新OAuth2令牌,java,spring,spring-security,oauth-2.0,spring-security-oauth2,Java,Spring,Spring Security,Oauth 2.0,Spring Security Oauth2,我们使用用户名密码授权将JS客户端连接到REST服务器。在某种程度上,oauth/token返回的令牌是我们的会话,因为它允许在有限的时间内访问后端 我们希望在每次使用令牌向后端发出请求时刷新该会话/令牌 我知道服务器发布了这个刷新令牌,我可以使用它在令牌过期后刷新我的令牌 问题是:我不想让客户端负责捕获令牌过期异常并在令牌过期之前重新验证或安排刷新。我希望令牌能够自我刷新,直到它在有限的时间内不再被使用——就像会话一样。(我也不希望它对每个“数据”请求都发出刷新请求,尽管我记得读过,刷新令牌只

我们使用用户名密码授权将JS客户端连接到REST服务器。在某种程度上,oauth/token返回的令牌是我们的会话,因为它允许在有限的时间内访问后端

我们希望在每次使用令牌向后端发出请求时刷新该会话/令牌

我知道服务器发布了这个刷新令牌,我可以使用它在令牌过期后刷新我的令牌

问题是:我不想让客户端负责捕获令牌过期异常并在令牌过期之前重新验证或安排刷新。我希望令牌能够自我刷新,直到它在有限的时间内不再被使用——就像会话一样。(我也不希望它对每个“数据”请求都发出刷新请求,尽管我记得读过,刷新令牌只有效一次…?)

在SpringSecurity中有没有一种方法可以做到这一点,或者我必须构建令牌存储的一些自定义实现,或者我选择的任何部分

因为我真的找不到答案(因此这篇文章),我在想:也许这样做是不明智的,尽管我不知道为什么。如果我可以偷令牌,我也可以偷刷新令牌。因此,我想我并不认为在第一时间使用刷新令牌有什么意义

编辑

作为对卢克·泰勒回答的回应,我将澄清我们的用例

  • 我们有一个REST服务器,它像Person一样保存应用程序数据。但也可以访问我们的内容管理,并允许客户发布到facebook。它封装了应用程序逻辑和数据存储
  • 我们已经有了一个成熟的客户机应用程序,它有自己的安全层,并通过客户机凭据流访问REST服务器上的数据。谁能做客户方决定的事情
  • 我们有几个中小型应用程序,比如facebook上的联系人应用程序,也可以使用客户端凭据访问REST服务器上的数据
  • 我们现在正在开发一个只使用javascript的客户端应用程序,它将访问REST层来完成大客户端应用程序所做的所有工作,但还需要提供一种方法来验证单个用户并允许多租户。因此,这个新的客户端应用程序使用用户名密码授权进行身份验证,并使用方法级别的安全性对用户进行授权
因此,我们有一个REST服务器,它需要提供对我们的可信应用程序的完全访问,该应用程序执行自己的安全工作,同一个服务器需要为我们新的多租户javascript客户端应用程序的用户提供访问。在生产中,我们将有几个REST服务器,每个服务器都有自己的数据库,但核心始终是相同的,因此理论上一个服务器应该能够处理所有数据库

我希望令牌刷新自己,直到它在有限的时间内不再使用为止——就像会话一样

这真的没有意义(在OAuth2上下文中)。访问令牌由授权服务器颁发,授权服务器决定其有效期。它是在资源服务器上“使用”的,资源服务器可能与授权服务器完全分离,因此OAuth2中没有将使用与令牌的生存期相连接的功能。从理论上讲,这是可能的黑客一起使这项工作,但这听起来像一个坏主意

如果我可以偷令牌,我也可以偷刷新令牌。因此,我想我并不认为在第一时间使用刷新令牌有什么意义

访问令牌被重复使用,并由客户端发送到授权服务器以外的服务器。刷新令牌由客户端保留,仅发送回授权服务器。客户端还必须进行身份验证才能成功使用刷新令牌,因此客户端id和密码也必须被泄露

从您的问题中不太清楚为什么要使用OAuth2。你可能应该扩大你的问题来澄清这一点。如果只有一个客户机和一个REST服务器,为什么不使用类似于HTTPS上的基本身份验证的东西呢


此外,客户端是基于浏览器的应用程序吗?如果是这样,用户名/密码授权实际上不适合在不受信任的客户端中使用。

谢谢您的详细回答。我在我的问题中添加了更多的信息来澄清我们的服务器结构。您是否能够弄清楚在SpringSecurityOAuth中刷新访问令牌是否有意义?