【问题标题】:create laravel passport token创建 laravel 护照令牌
【发布时间】:2020-01-14 15:42:42
【问题描述】:

我想创建与 laravel 护照 /oauth/token 控制器相同的控制器。 我怎样才能做到这一点? (我想将我发送到 oauth/token 的所有参数发送并检查它们)。

我知道我可以创建这样的令牌:

User::find('1')->createToken('token')->accessToken;

但我想设置 oauth_client 并检查所有这些:

grant_type
grant_type
client_secret
username
password

谢谢!

【问题讨论】:

    标签: laravel laravel-passport


    【解决方案1】:

    要创建和签署您自己的令牌,您可以扩展 Passport 的 Token 类并添加一个convertToJWT 方法。以下是如何构建自己的令牌的示例:

    <?php
    
    namespace App;
    
    use Laravel\Passport\Passport;
    use Lcobucci\JWT\Builder;
    use Lcobucci\JWT\Signer\Key;
    use Lcobucci\JWT\Signer\Rsa\Sha256;
    use League\OAuth2\Server\CryptKey;
    
    class CustomToken extends \Laravel\Passport\Token
    {
        /**
         * Generate a JWT from the access token
         *
         * @return string
         */
        public function convertToJWT()
        {
            $privateKey = new CryptKey(
                'file://' . Passport::keyPath('oauth-private.key'),
                null,
                false
            );
    
            return (string) (new Builder())
                ->setAudience($this->client_id)
                ->setId($this->id, true)
                ->setIssuedAt(time())
                ->setNotBefore(time())
                ->setExpiration($this->expires_at->getTimestamp())
                ->setSubject($this->user->id)
                ->set('scopes', [])
                ->sign(new Sha256(), new Key($privateKey->getKeyPath(), $privateKey->getPassPhrase()))
                ->getToken();
        }
    }
    

    然后,您可以通过调用具有所需属性的构造函数来创建新令牌。 Token 继承自 Model,因此构造函数采用 $attributes 数组,其中的键应与 oauth_access_tokens 中的列名匹配。创建该令牌后,您可以使用 convertToJWT() 方法并在响应中返回该令牌:

    public function myControllerFunction(Request $request) {
      $token = new CustomToken([...]);
      $access_token = $token->convertToJWT();
      return json(["access_token" => $access_token]);
    }
    

    【讨论】:

      猜你喜欢
      • 2019-11-17
      • 1970-01-01
      • 2023-01-24
      • 2019-05-15
      • 2021-03-08
      • 2020-09-21
      • 2019-09-13
      • 2018-08-04
      • 2019-12-22
      相关资源
      最近更新 更多