我想创建一个控制器,其作用类似于laravel Passport / oauth / token控制器。 我怎样才能做到这一点? (我想将我发送的所有参数发送到oauth / token并检查它们)。
我知道我可以创建这样的令牌:
User::find('1')->createToken('token')->accessToken;
但是我想设置oauth_client并检查所有这些:
grant_type
grant_type
client_secret
username
password
谢谢!
答案 0 :(得分:0)
要创建和签名自己的令牌,可以扩展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]);
}