最近在为公司设计认证系统,使用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。