【问题标题】:Persisting the refresh token of the Spring OAuth2RestTemplate持久化 Spring OAuth2RestTemplate 的刷新令牌
【发布时间】:2020-02-10 18:24:13
【问题描述】:

我有一个移动应用程序,它使用我的 Spring Boot 后端 进行身份验证和访问数据等操作。 Spring Boot 应用程序的一部分使用 OAuth2 从资源服务器访问数据。我偶然发现了一个 oauth2 client library for Spring,它发挥了魔力,一切都开箱即用。

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

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

感谢任何建议!

【问题讨论】:

    标签: java spring-boot spring-security-oauth2 refresh-token oauth2resttemplate


    【解决方案1】:

    基本上 OAuth2 架构用于第 3 方身份验证和授权。在这种机制中,凭证保持安全,并且在一切都在令牌上工作时不会传递!但是您也可以使用它来隐式地为您自己的身份验证工作。


    在您的情况下,首先当您点击“/oauth/token”(默认端点)以及客户端密码和客户端 ID 以及其余用户凭据时,算法会检查用户详细信息在数据库中并匹配请求标头中存在的秘密和 Id。如果一切顺利,它将生成一个承载类型 - 访问和刷新令牌,并将这些令牌存储在数据库的不同集合中。此特定用户映射到这些令牌,并且只能使用它们访问 /api。不需要用户凭据.如果您使用 MongoDb 存储和访问存储的令牌,则可以使用 MongoTokenStore。

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

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

    这是 OAuth2.0 的基本功能。

    正常访问令牌的生命周期较短,而刷新令牌的生命周期相对较长。访问令牌过期后,可以使用刷新令牌生成新的访问令牌。如果刷新令牌过期,那么您必须再次点击“/oauth/token”api,完成流程循环并再次生成令牌。到期后,当您使用现有访问令牌点击 api 时,它们是从集合中删除。这是该机制的默认架构,其余您可以根据需要制作自定义类并修改其功能!这种架构非常安全,是一个很好的实践。

    Screenshot Flow Diagram

    查看来自digitalocean 的帖子。

    编辑 ----

    1. 我个人使用了 MongoDB,在那里我做了两个集合 - AuthAccessTokens 和 AuthRefreshTokens 即这两个在哪里 存储。访问令牌对象具有关联 RefreshToken 的 Id 这有助于将这两者映射在一起。休息自定义附加信息。 也可以使用 TokenEnhancer 添加。因此令牌将始终 除非过期,否则存在于数据库中。通俗地说,如果你 只是专注于后端的东西,你可以随时检查你的 通过使用正确的用户凭据点击“/oauth/token”来访问令牌,并且 它将通过从数据库中获取它来返回分配的令牌,否则 如果您在首先生成令牌后开发完整堆栈 只需将它们存储在客户端或浏览器的本地存储中 或应用程序。如果你想故意结束会话,比如 注销中的示例只需从它们各自的标记中删除这些标记 收藏。

    【讨论】:

    • 但是如果我使用我的 Spring 应用程序作为客户端代表我的用户进行 OAuth2 安全调用,我是否需要将他们的刷新令牌保存在我自己的数据库中?因为如果会话过期并且刷新令牌丢失会发生什么。是否会调用“oauth/token”端点来获取新令牌?你不需要授权码吗?
    • 我想为每个请求他的数据的用户在我的数据库中保存刷新令牌。我的 Spring 应用程序是一个客户端。我发现我必须实现一个为我执行此操作的 JdbcClientTokenServices bean。感谢您的帮助
    猜你喜欢
    • 2020-07-04
    • 2014-12-21
    • 1970-01-01
    • 1970-01-01
    • 2013-09-13
    • 1970-01-01
    • 2017-11-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多