Laravel中前后端分离,调用API认证,如何修改 Passport Personal Access Token 过期时间?

1. laravel 版本是 Laravel6.x, 认证方式是 Passport#

2. 请问 Laravel 中前后端分离,调用 API 认证,如何修改 Passport Personal Access Token 过期时间#

class AppServiceProvider extends ServiceProvider
{

    /**
     * Bootstrap any application services.
     *
     * @return void
     */
    public function boot()
    {
        //登录2小时后过期
        $this->app->get(AuthorizationServer::class)
            ->enableGrantType(
                new PersonalAccessGrant(),
                new \DateInterval('PT2H')
            );
    }
}
$user = Auth::guard('web_audit')->user();
$tokenResult = $user->createToken('Personal Access Token', 'user');

3. 期待结果:希望能够在任意 api 接口调用后的 2 小时未操作后,认证再过期。#

4. 实际结果:初次登录后,只要两小时后就会认证失效。#

《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
讨论数量: 18

你用的是哪一块的认证呢?如果是 passport 的话,用的是 password 方式的,修改 oauth_access_tokens 表的 expires_at

$token = $user->token();
$token->update(['expires_at' => '两小时后']);
2年前 评论
Partrick (楼主) 2年前
Partrick (楼主) 2年前

得看你使用了那种认证方式

2年前 评论
Partrick (楼主) 2年前

不要尝试去变更 Token 的过期时间,这不是一个合理的行为。

正确的处理方式应该是销毁旧的 token,重新签发一个新的 Token。

例如在 Token 过期的半分钟内如果发了请求,就会销毁当前正在使用的 Token,同时签发新的 Token。

如果使用 Token 来做鉴权,建议参照 JWT 中对于 Token 的规范。

2年前 评论

正确做法是监听 401 并用刷新令牌刷新 token,如果刷新令牌也失效,那就重新登录,刷新令牌一般比 token 拥有更长的有效期,可以做到在适当的时间内永不退出

2年前 评论
Partrick (楼主) 2年前
Partrick (楼主) 2年前
Imuyu (作者) 2年前
Partrick (楼主) 2年前
Partrick (楼主) 2年前

可以通过中间件实现

        $token = $user->token();
        $tokenRepository = app(TokenRepository::class);
        if (Carbon::now()->gt($token->expires_at)){
            $tokenRepository->revokeAccessToken($token->id);
        }
        $token->update(['expires_at' => Carbon::now()->addMinutes(1)]);
        $token->save();
2年前 评论
2年前 评论
Partrick (楼主) 2年前

你这种只能在服务器存 token 的过期时间,每次请求过来判断有没有过期,不能用 jwt 自带的过期时间。 核心就是中心化延长过期时间

2年前 评论

这种在服务刷新过期时间不是很好吧,并发量大了还是有影响的,前后端分离的还是前端直接在请求时效验是否 2 小时内有操作没有,超 2 小时直接发起注销动作,让服务器上的失效,
服务器上效验比较适合前后一体的非 token 认证。如 cookie 认证等

2年前 评论
Partrick (楼主) 2年前