Laravel Passport令牌生命周期

Ter*_*ion 11 php oauth-2.0 laravel laravel-passport laravel-5.4

我不知道我做错了什么.我无法设置令牌过期时间.

<?php

namespace App\Providers;

class AuthServiceProvider extends ServiceProvider
{
    public function boot()
    {
        $this->registerPolicies();

        Passport::tokensExpireIn(Carbon::now()->addDays(1));
        Passport::refreshTokensExpireIn(Carbon::now()->addDays(30));
    }
}
Run Code Online (Sandbox Code Playgroud)

但是当我打电话时$user->createToken(),例如:

<?php
// as a demo
namespace App\Http\Middleware;

class ParseSpecialToken
{
    public function handle($request, Closure $next)
    {
        $user = User::find(1);
        $accessToken = $user->createToken('Some token')->accessToken;
        $request->headers->add(['Authorization' => 'Bearer '. $accessToken]);

        return $next($request);
    }
}
Run Code Online (Sandbox Code Playgroud)

令牌到期仍为1年,而不是1天.为什么?如何更改exp时间?

pat*_*cus 17

createToken()方法创建个人访问令牌。默认情况下,这些令牌会在 1 年(或 100 年,如果由 laravel/passport <= 1.0.11 创建)后过期。Passport::tokensExpireIn()Passport::refreshTokensExpireIn()方法不会修改此类令牌的到期时间。

laravel/护照 >= 7.0.4

Passport 7.0.4 版添加了一个新方法Passport::personalAccessTokensExpireIn(),允许您更新个人访问令牌的到期时间。如果您使用的是此版本或更高版本,则可以将此方法调用添加到您的AuthServiceProvider::boot()方法中。

Passport::personalAccessTokensExpireIn(Carbon::now()->addDays(1));
Run Code Online (Sandbox Code Playgroud)

laravel/护照 < 7.0.4

如果您还没有使用 Passport 7.0.4 版本,您仍然可以修改个人访问令牌过期时间,但它更手动。您将需要启用具有所需到期时间的个人访问授权的新实例。这也可以在您的AuthServiceProvider::boot()方法中完成。

$server = $this->app->make(\League\OAuth2\Server\AuthorizationServer::class);
$server->enableGrantType(new \Laravel\Passport\Bridge\PersonalAccessGrant(), new \DateInterval('P100Y'));
Run Code Online (Sandbox Code Playgroud)

笔记

修改expires_at数据库中的字段不会做任何事情。真正的到期日期存储在令牌本身内。此外,尝试修改expJWT 令牌内的声明将不起作用,因为令牌已签名并且对其进行任何修改都会使其无效。因此,您现有的所有令牌都将具有其原始到期时间,并且无法更改。如果需要,您将需要重新生成新令牌。


viv*_*ani 13

以下是用于更新所有授权类型的到期时间的方法:

个人访问令牌:

public function boot(){
        $this->registerPolicies();

        Passport::routes();
        Passport::personalAccessTokensExpireIn(Carbon::now()->addHours(24));
        Passport::refreshTokensExpireIn(Carbon::now()->addDays(30));
}
Run Code Online (Sandbox Code Playgroud)

全部休息

public function boot(){
        $this->registerPolicies();

        Passport::routes();
        Passport::tokensExpireIn(Carbon::now()->addHours(24));
        Passport::refreshTokensExpireIn(Carbon::now()->addDays(30));
}
Run Code Online (Sandbox Code Playgroud)

只需在AuthServiceProvider的启动方法中更新以上代码即可。


Sum*_*war 7

护照文档似乎回答了这个问题

https://laravel.com/docs/5.6/passport#token-lifetimes

在调用boot方法中AuthServiceProviderPassport::tokenExpiresIn()

public function boot()
{
    $this->registerPolicies();

    Passport::routes();

    Passport::tokensExpireIn(now()->addDays(15));

    Passport::refreshTokensExpireIn(now()->addDays(30));
}
Run Code Online (Sandbox Code Playgroud)


Ter*_*ion 0

啊,发现个人令牌总是长期存在的,并且无法配置:(