【问题标题】:Laravel passport refresh tokenLaravel 护照刷新令牌
【发布时间】:2019-05-15 10:18:56
【问题描述】:

我正在使用 Laravel 5.5 版,使用 Passport 进行身份验证。 我已成功创建令牌并可以使用auth:api 中间件访问它。

但每当用户登录系统时,它都会为该用户创建新令牌。我只想刷新用户最后一个令牌并将其发回,而不是创建一个新令牌。

我已使用以下代码生成身份验证令牌

$token = $user->createToken('string-'.$user->id)->accessToken;

它生成 1075 个字符的令牌,但是当我检查数据库表 oauth_access_tokens 时,它向我显示了 80 个字符的令牌。

如何使用 80 个字符的令牌获取最后生成的令牌并刷新它并将其发回?

提前致谢

【问题讨论】:

    标签: laravel laravel-5.5 laravel-passport laravel-authorization


    【解决方案1】:

    如果您的应用程序发出短期访问令牌,用户将需要通过在发出访问令牌时提供给他们的刷新令牌来刷新他们的访问令牌。在本例中,我们将使用 Guzzle HTTP 库来刷新令牌:

    $http = new GuzzleHttp\Client;
    
    $response = $http->post('http://your-app.com/oauth/token', [
        'form_params' => [
            'grant_type' => 'refresh_token',
            'refresh_token' => 'the-refresh-token',
            'client_id' => 'client-id',
            'client_secret' => 'client-secret',
            'scope' => '',
        ],
    ]);
    
    return json_decode((string) $response->getBody(), true);
    

    这个/oauth/token 路由将返回一个包含access_token、refresh_tokenexpires_in 属性的JSON 响应。 expires_in 属性包含访问令牌过期前的秒数。

    【讨论】:

    • 感谢您的快速回复。您能否准确解释一下我需要在form_params 中传递哪些值?
    • @AkshayDeshmukh 您必须发送旧的刷新令牌 ('refresh_token' => 'the-refresh-token',),此代码会生成一个新令牌并刷新刷新
    【解决方案2】:

    我做过类似的事情。

    为授予刷新令牌创建了一个端点。 在我的控制器中,

    public function userRefreshToken(Request $request)
    {
    $client = DB::table('oauth_clients')
        ->where('password_client', true)
        ->first();
    
    $data = [
        'grant_type' => 'refresh_token',
        'refresh_token' => $request->refresh_token,
        'client_id' => $client->id,
        'client_secret' => $client->secret,
        'scope' => ''
    ];
    $request = Request::create('/oauth/token', 'POST', $data);
    $content = json_decode(app()->handle($request)->getContent());
    
    return response()->json([
        'error' => false,
        'data' => [
            'meta' => [
                'token' => $content->access_token,
                'refresh_token' => $content->refresh_token,
                'type' => 'Bearer'
            ]
        ]
    ], Response::HTTP_OK);
    }
    

    【讨论】:

      猜你喜欢
      • 2019-11-17
      • 2023-01-24
      • 2017-09-13
      • 2017-04-09
      • 2017-09-13
      • 2018-01-03
      • 2020-01-14
      • 2015-10-04
      • 2019-09-13
      相关资源
      最近更新 更多