【问题标题】: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]);
}