有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java使用OAuth2保护RESTWeb服务:一般原则

我们正在使用Spring security和OAuth2在java中构建一个RESTful web应用程序

一切都按预期进行,我开始了解访问和刷新令牌的基本知识,但仍然存在一些不确定性,通过浏览互联网,我对不同的观点感到更加困惑

我们现在的实施方式:

在SpringSecurity中,对于给定用户,一次只能有一个有效的刷新令牌。 刷新令牌的有效期为300秒(5分钟)。 每次我们为用户请求一个新的刷新令牌时,都会返回相同的刷新令牌,但不会重置有效时间

这样,每隔302秒在后台请求一个新的刷新令牌,该刷新令牌用于请求放入REST调用的授权头中的访问令牌

这在大多数情况下都可以正常工作,但是如果在300到302秒内执行请求,其中第一个刷新令牌已过期,第二个尚未返回,则会出现身份验证错误,用户将注销应用程序

我在网上读到很多不同的建议:

  • 第一个是为每个web服务调用请求一个新的刷新令牌。这一点我们没有考虑,因为我们必须提供凭据(用户名/密码),以获得刷新令牌为每个单一的WS请求。

  • 第二种方法是将刷新令牌的有效期增加到10小时(而不是5分钟)。这将解决或解决大多数情况下的问题。但是,在刷新令牌过期之后,在用户拥有新令牌之前,仍然存在用户注销的可能性

解决这个问题的最佳方法是什么。10小时的有效期安全吗?是否建议为每个ws调用使用新的刷新令牌


共 (1) 个答案

  1. # 1 楼答案

    我认为为每次通话创建新的刷新令牌并不是很好的做法。刷新令牌的全部目的是在其到期时获取新的访问令牌。因此,当您收到身份验证错误(假设401)时,您知道访问令牌已过期或不再有效,那么您应该尝试使用刷新令牌刷新它以获得新的访问令牌。如果访问令牌刷新不起作用,则应注销用户。在每个刷新的访问令牌响应中,您可以分配一个新的刷新令牌,因此只要用户拥有有效的刷新令牌,他/她就可以在新的访问令牌过期时获得新的访问令牌