【问题标题】:How to get id from refresh token in Laravel Passport?如何从 Laravel Passport 中的刷新令牌中获取 id?
【发布时间】:2020-12-15 06:24:49
【问题描述】:

我正在编写一个控制器,我想在其中获取刷新令牌 ID,但我无法弄清楚如何在 laravel 中进行。

解密访问令牌没有问题。我正在使用标准协议并使用护照的公钥接收数据。

我尝试了不同的方法。

<?php

namespace App\Http\Controllers\Api;

use App\Http\Controllers\Controller;

use Illuminate\Http\Request;

class RefreshTokenController extends Controller
{
    public static $public_key;

    public static function refresh_token(Request $request)
    {
        self::$public_key  = file_get_contents(storage_path() . DIRECTORY_SEPARATOR . 'oauth-public.key');
        $refresh_token = $request->get('refresh_token');
        $data = base64_decode($refresh_token);
        $public_key = openssl_get_publickey(self::$public_key);
        openssl_public_decrypt($data, $decrypted, $public_key);
        
        dd($decrypted);
    }
}

我也尝试了标准decrypt();。但它也给出了一个错误。

传入数据示例。

def50200dc11ab81fdb16530806530f85fe41f7facc934447589b3a0daa202d56f5b4a8265db94b418e09280bcc8a05c88c3817612200d3c28de15c9adfd4a213f7cb136fca6f78099d686fce8d5ddf93f9bb29c1df081d7f7b75394875b5287a7ca5d9ca5eb513ea13a26195aeda41c897832467ec1b0348cdb3e5ed9476e5e7d8712b8628c18ee8ffb525de965faeb3f25b1a8eb4ee904a15341650fe6d3ed901600beda0f80c71b9b607f3e549ba8fbd9eda0e02fc7647ab8b4ea9161f7eb65833bfe46fb7f3e116a207282f947660ead392dc78ad2b9501331b4d28433a421a4193484e113baf8050d3878bd94b6ac860a1a766e79877f1af8d3ab5aee3779bf33c2a7e347552e51bb8b5448585435ef7b79d06853bcd775ce781b8d2e56289dbc8d4a10ec507aecde19bb496e90f88a687ee9bb33755046d50f860f7723d87bd4c079cd4d1242903bdb3ca447ce6ab03f2fd800182d0d8c5a3b7de5402ba2ecb4058d458cbee94da433635877e63120d6418e51eafdfd763191fceef399c16c088e27da9ffbf9

根据 oauth_refresh_tokens 表。保留所有刷新令牌 ID。调用refresh token方法时,根据refresh token,在数据库中匹配到对应的access token,并进行更新。

我将不胜感激。

【问题讨论】:

    标签: php laravel oauth-2.0 jwt laravel-passport


    【解决方案1】:
    <?php
    
    namespace App\Http\Controllers\Api;
    
    use App\Http\Controllers\Controller;
    use Defuse\Crypto\Crypto;
    use Exception;
    use Illuminate\Http\Request;
    
    class RefreshTokenController extends Controller
    {
        public static function refresh_token(Request $request)
        {
            $refresh_token = $request->get('refresh_token');
            $app_key = env('APP_KEY');
            $enc_key = base64_decode(substr($app_key, 7));
            try {
                $crypto = Crypto::decryptWithPassword($refresh_token, $enc_key);
            } catch (Exception $exception){
                return $exception;
            }
            return  json_decode($crypto, true);
        }
    }
    

    Laravel Passport 使用位于 ENV 文件中的 APP_ 加密密码。 使用库Defuse\Crypto\Crypto;

    【讨论】:

      猜你喜欢
      • 2020-04-07
      • 2021-01-18
      • 2020-09-14
      • 2018-04-23
      • 2019-09-09
      • 2020-07-12
      • 2018-02-01
      • 2019-03-25
      • 1970-01-01
      相关资源
      最近更新 更多