3

我正在使用bshaffer/oauth2-server-php库来实现 oauth2 服务器。

目前,我使用访问令牌对每个请求进行身份验证,并在访问令牌过期时刷新令牌,因此如果刷新令牌未过期,则服务器返回新的访问令牌。如果刷新令牌过期,则返回以下错误: {"error":"invalid_grant","error_description":"Refresh token has expired"} ,然后在客户端用户自动注销。

我想用 Oauth2 实现标准的“PHP 会话超时”。因此,我的令牌将在上次请求后 XX 分钟后失效(如果同时没有请求),这意味着我将在每个请求上将令牌的有效期延长 XX 分钟。

我希望刷新令牌的过期时间与我上次的请求一致,因此将在 XX 分钟用户不活动后返回之前的错误。谁能告诉我实现这一点的最佳实践是什么?我想在每个请求的标头中发送刷新令牌并手动延长它在数据库中的过期时间,但不知道这是否足够安全。

这是由 Oauth2 处理的,还是不应该在使用 API 调用的系统上实现?

另外,我对如何在 oauth2 中处理这种情况感兴趣?

提前致谢。

4

2 回答 2

1

虽然做你想做的事不是一个好主意。但是有两种方法可以实现注销功能:

  1. 在 OAuth2 令牌 session_id=xyz 中创建一个自定义字段。现在将此会话 ID 存储在服务器存储中,并使用创建、使用等日期字段。在每个请求上,更新使用的字段。一旦在特定的非活动时间后收到请求,您就去数据库中检查该会话 ID,如果时间结束,则启动注销过程并终止该用户/客户端的所有会话 ID,并将用户重定向到登录页面
    1. 发出令牌时,还要发出一个加密的 cookie,客户端将随每个请求一起发送。在每个请求中,您将更新 cookie 的读取属性并做出响应。如果在特定时间结束后收到请求,那么您可以解密 cookie 并确定此 cookie 是否需要失效。如果是这样,请启动注销过程并使用过期属性/重定向到登录页面更新 cookie。
    2. 可以使用以上的组合。
于 2016-09-05T20:45:58.817 回答
0

这不是 OAuth2 的工作方式。

OAuth2 不关心您的会话或用户或其他任何事情。它所做的只是发出一个在可配置的时间内有效的令牌。OAuth2 进行应用程序级别的授权,与用户会话无关。

于 2016-06-07T12:39:11.173 回答