【Laravel】记 laravel/passport 单独调整每种token的有效期的 Hack操作

【Laravel】记 laravel/passport 单独调整每种token的有效期的 Hack操作

最近在为公司设计认证系统,使用laravel当然自动想到使用 laravel/passport 这个包来实现。

不过有一个小问题,就是所有类型的token都只统一使用:

1
Passport::tokensExpireIn(now()->addSeconds(3600));

这种方式来定义有效期。不过对于机器对机器的Client Token 而言,3600s实在是有些短,通过一下午各种hack不得法…发现了服务提供器已经率先注入了时间,所以直接继承passport包的 PassportServiceProvider 并修改 registerAuthorizationServer 的内容,即可单独设定有效期。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
class PassportServiceProvider extends PassportPassportServiceProvider
{
    /**
     * 单独 调整了 client token 的 时间
     *
     * @return void
     */
    protected function registerAuthorizationServer()
    {
        $this->app->singleton(AuthorizationServer::class, function () {
            return tap($this->makeAuthorizationServer(), function ($server) {
                $server->enableGrantType(
                    $this->makeAuthCodeGrant(), Passport::tokensExpireIn()
                );

                $server->enableGrantType(
                    $this->makeRefreshTokenGrant(), Passport::tokensExpireIn()
                );

                $server->enableGrantType(
                    $this->makePasswordGrant(), Passport::tokensExpireIn()
                );

                $server->enableGrantType(
                    new PersonalAccessGrant, new \DateInterval('P1Y')
                );

                $server->enableGrantType(
                    new ClientCredentialsGrant, new \DateInterval('P1D')//手动设定时间 Passport::tokensExpireIn()
                );

                if (Passport::$implicitGrantEnabled) {
                    $server->enableGrantType(
                        $this->makeImplicitGrant(), Passport::tokensExpireIn()
                    );
                }
            });
        });
    }
}

别忘记了在 config/app.php 中重新设定 provider。