Java 持久化Spring OAuth2RestTemplate的刷新标记

Java 持久化Spring OAuth2RestTemplate的刷新标记,java,spring-boot,spring-security-oauth2,refresh-token,oauth2resttemplate,Java,Spring Boot,Spring Security Oauth2,Refresh Token,Oauth2resttemplate,我有一个移动应用程序,它使用Spring Boot后端进行身份验证和访问数据。Spring引导应用程序的一部分使用OAuth2从资源服务器访问数据。我无意中发现了一个为春天做的魔术,一切都是开箱即用 当我试图弄清楚这个库是如何工作的时候,我似乎找不到它处理刷新令牌的方法的答案。我知道oauth2client为每个用户绑定到一个会话,但是会话结束时会发生什么?访问和刷新令牌不会丢失吗 我一直在寻找在数据库中为每个用户持久保存刷新令牌的方法,但在库中找不到对此的任何支持。这让我想知道我是否必须自己实

我有一个移动应用程序,它使用Spring Boot后端进行身份验证和访问数据。Spring引导应用程序的一部分使用OAuth2从资源服务器访问数据。我无意中发现了一个为春天做的魔术,一切都是开箱即用

当我试图弄清楚这个库是如何工作的时候,我似乎找不到它处理刷新令牌的方法的答案。我知道oauth2client为每个用户绑定到一个会话,但是会话结束时会发生什么?访问和刷新令牌不会丢失吗

我一直在寻找在数据库中为每个用户持久保存刷新令牌的方法,但在库中找不到对此的任何支持。这让我想知道我是否必须自己实施,或者是否有必要这样做


任何建议都将不胜感激

基本上,OAuth2体系结构用于第三方身份验证和授权。在这个机制中,当一切都在令牌上运行时,凭证保持安全并且不会被传递!但是您也可以使用它隐式地进行您自己的身份验证

在您的情况下,首先,当您点击/oauth/tokendefault端点以及客户机机密和客户机Id以及其他用户凭据时,algo会检查数据库中的用户详细信息,并匹配请求头中的机密和Id。如果一切正常,它将生成一个承载类型-访问和刷新令牌,并将这些令牌存储在数据库中的不同集合中。此特定用户映射到这些令牌,只能使用它们访问/api。不需要用户凭据。如果使用MongoDb存储和访问存储的令牌,则可以使用MongoTokenStore

接下来,您必须配置WebSecurity/AuthorizationServer/ResourceServer,以便分别检查端点和头令牌令牌令牌、用户的身份验证和授权以及提供对资源的有效令牌访问

最后,当您拥有一个有效的访问令牌,并使用正确的头请求点击一个api时,服务器将授予您访问资源的权限

这是OAuth2.0的基本功能。 通常,访问令牌的生存期较短,而刷新令牌的生存期相对较大。一旦访问令牌过期,就可以使用刷新令牌生成新的访问令牌。如果刷新令牌过期,则必须再次点击/oauth/token api,完成流程循环并再次生成令牌。过期后,当点击带有现有访问令牌的api时,这些令牌将从集合中删除。这是该机制的默认体系结构,您可以根据需要创建自定义类并修改其功能!这种架构非常安全,是一种很好的实践

请从中查看此帖子

编辑--

就我个人而言,我使用MongoDB进行了两次收集- AuthAccessTokens和AuthRefreshTokens,即这两者的位置 存储。访问令牌对象的Id为关联的RefreshToken 这有助于将这两者联系起来。Rest自定义附加信息。 也可以使用TokenEnhancer添加。因此,代币将始终 在DB中存在,除非过期。用外行的话说,如果你 只关注后端的东西,你可以随时检查你的 通过点击/oauth/token并使用正确的用户凭据和 它将通过从数据库中获取已分配的令牌来返回该令牌,否则 如果您在第一次生成令牌后开发完整堆栈 步骤:只需将它们存储在客户端的浏览器本地存储中 或应用程序。如果你想故意结束这次会议,比如 注销中的示例只需从各自的令牌中删除这些令牌 收藏。
但是,如果我使用Spring应用程序作为客户端代表我的用户进行OAuth2安全调用,我是否需要将他们的刷新令牌保存在我自己的数据库中?因为如果会话过期并且刷新令牌丢失,将会发生什么。“oauth/token”端点是否为新令牌而被调用?你不需要授权码吗?我想在数据库中为每个请求数据的用户保存刷新令牌。我的Spring应用程序是一个客户端。我发现我必须实现一个JdbcClientTokenServices bean来为我实现这一点。谢谢你的帮助