在会话之间使用刷新令牌

Using refresh tokens between sessions

我正在我的 PHP 网络应用程序中实施 OAuth2。访问令牌分发给 javascript 网络客户端,有效期为 1 小时,并提供刷新令牌。如果客户端在下次导航到我的 Web 应用程序时退出浏览器超过 1 小时,则访问令牌在对资源服务器的初始请求期间不再有效。然后资源服务器 return 是一个不受保护的页面。

如果我有:

  1. 访问令牌过期
  2. 有效的刷新令牌
  3. 新会话

资源服务器 return 是否应该是一个未受保护的页面,而使用 javascript 的客户端是否应该尝试刷新访问令牌,如果成功则强制页面重新加载?这很常见吗?还是我遗漏了一些东西,所以资源服务器没有被调用两次?

目前客户端将刷新令牌传递给资源服务器,因此从技术上讲,资源服务器可以刷新访问令牌。但是,RFC 6749 似乎不允许这样做,这似乎表明资源服务器永远不应看到刷新令牌。

"刷新令牌在传输和存储过程中必须保密,并且 仅在 授权服务器和客户端 之间共享 已发出刷新令牌。"

在任何情况下,正如您所指出的,永远不会将刷新令牌传递给资源服务器。刷新令牌只会呈现给授权服务器。但是:

浏览器内的客户端(例如 Javascript 客户端)应使用隐式授权来获取其访问令牌。在这种情况下,不会发出刷新令牌。这对于浏览器内的客户端应该不是问题,因为在这种情况下用户存在,因此不需要刷新令牌来获取新的访问令牌:用户将再次向授权服务器进行身份验证,希望利用现有的 SSO 会话为此。