Oauth2 - 在XX分钟不活动后实现自动注销

时间:2016-01-08 16:27:39

标签: php api oauth yii2 oauth2

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

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

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

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

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

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

提前致谢。

2 个答案:

答案 0 :(得分:0)

这不是OAuth2的工作方式。

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

答案 1 :(得分:0)

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

  1. 在OAuth2令牌session_id = xyz中创建自定义字段。现在将此会话ID存储在服务器存储上,其中包含创建,使用的日期字段。在每个请求上,更新已使用的字段。一旦您在某个非活动时间之后收到请求,您就可以在数据库中检查该会话ID,如果时间结束,则启动注销过程并终止该用户/客户端的所有会话ID并将用户重定向到登录页面
    1. 发出令牌时,发出加密的cookie以及哪个客户端将随每个请求一起发送。在每个请求中,您将更新cookie的读取属性并回复。如果在一定时间结束后收到请求,那么您可以解密cookie并确定该cookie是否需要失效。如果是这样,请启动注销过程并使用过期属性更新cookie /重定向到登录页面。
    2. 可以使用上述组合。