最近在为公司设计认证系统,使用laravel当然自动想到使用 laravel/passport 这个包来实现。
不过有一个小问题,就是所有类型的token都只统一使用:
Passport::tokensExpireIn(now()->addSeconds(3600));
这种方式来定义有效期。不过对于机器对机器的Client Token 而言,3600s实在是有些短,通过一下午各种hack不得法...发现了服务提供器已经率先注入了时间,所以直接继承passport包的 PassportServiceProvider 并修改 registerAuthorizationServer 的内容,即可单独设定有效期。
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。