在会话之间使用刷新令牌
Using refresh tokens between sessions
我正在我的 PHP 网络应用程序中实施 OAuth2。访问令牌分发给 javascript 网络客户端,有效期为 1 小时,并提供刷新令牌。如果客户端在下次导航到我的 Web 应用程序时退出浏览器超过 1 小时,则访问令牌在对资源服务器的初始请求期间不再有效。然后资源服务器 return 是一个不受保护的页面。
如果我有:
- 访问令牌过期
- 有效的刷新令牌
- 新会话
资源服务器 return 是否应该是一个未受保护的页面,而使用 javascript 的客户端是否应该尝试刷新访问令牌,如果成功则强制页面重新加载?这很常见吗?还是我遗漏了一些东西,所以资源服务器没有被调用两次?
目前客户端将刷新令牌传递给资源服务器,因此从技术上讲,资源服务器可以刷新访问令牌。但是,RFC 6749 似乎不允许这样做,这似乎表明资源服务器永远不应看到刷新令牌。
"刷新令牌在传输和存储过程中必须保密,并且
仅在 授权服务器和客户端 之间共享
已发出刷新令牌。"
在任何情况下,正如您所指出的,永远不会将刷新令牌传递给资源服务器。刷新令牌只会呈现给授权服务器。但是:
浏览器内的客户端(例如 Javascript 客户端)应使用隐式授权来获取其访问令牌。在这种情况下,不会发出刷新令牌。这对于浏览器内的客户端应该不是问题,因为在这种情况下用户存在,因此不需要刷新令牌来获取新的访问令牌:用户将再次向授权服务器进行身份验证,希望利用现有的 SSO 会话为此。
我正在我的 PHP 网络应用程序中实施 OAuth2。访问令牌分发给 javascript 网络客户端,有效期为 1 小时,并提供刷新令牌。如果客户端在下次导航到我的 Web 应用程序时退出浏览器超过 1 小时,则访问令牌在对资源服务器的初始请求期间不再有效。然后资源服务器 return 是一个不受保护的页面。
如果我有:
- 访问令牌过期
- 有效的刷新令牌
- 新会话
资源服务器 return 是否应该是一个未受保护的页面,而使用 javascript 的客户端是否应该尝试刷新访问令牌,如果成功则强制页面重新加载?这很常见吗?还是我遗漏了一些东西,所以资源服务器没有被调用两次?
目前客户端将刷新令牌传递给资源服务器,因此从技术上讲,资源服务器可以刷新访问令牌。但是,RFC 6749 似乎不允许这样做,这似乎表明资源服务器永远不应看到刷新令牌。
"刷新令牌在传输和存储过程中必须保密,并且 仅在 授权服务器和客户端 之间共享 已发出刷新令牌。"
在任何情况下,正如您所指出的,永远不会将刷新令牌传递给资源服务器。刷新令牌只会呈现给授权服务器。但是:
浏览器内的客户端(例如 Javascript 客户端)应使用隐式授权来获取其访问令牌。在这种情况下,不会发出刷新令牌。这对于浏览器内的客户端应该不是问题,因为在这种情况下用户存在,因此不需要刷新令牌来获取新的访问令牌:用户将再次向授权服务器进行身份验证,希望利用现有的 SSO 会话为此。