尝试根据本手册实施自定义授权服务提供商:
https://github.com/mikemclin/passport-custom-request-grant
在register method
内部我们获取auth服务器实例(使用帮助方法),然后使用AuthServer添加我们的授权:
public function register()
{
app(AuthorizationServer::class)->enableGrantType($this->makeCustomRequestGrant(), Passport::tokensExpireIn());
}
这对我不起作用。我试图以另一种方式注册我的补助金:
$this->app->singleton(AuthorizationServer::class, function () {
return tap($this->makeAuthorizationServer(), function ($server) {
$server->enableGrantType(
$this->makeCustomRequestGrant(), Passport::tokensExpireIn()
);
});
});
如何使用另一个授权“扩展”我的单例服务器实例?在我的情况下,我只是实例化了新的,因此以前的授权类型变得不受支持。
主要目标是创建将使用其他模型的授权 - 客户(非用户)和授权激活码。用户将使用client_credentials尝试代码,然后他可以使用激活代码授予api查询 - 使用另一个范围。
答案 0 :(得分:1)
我知道这个答案可能会迟到,但我找到了解决这个问题的方法。
我只是在我的AuthServiceProvider中将授权添加到服务器,并将授权逻辑提取到Grant Class以保持干净。
您可以查看PasswordGrant类作为基础。
问候!
namespace App\Providers;
use App\Auth\Grants\FacebookGrant;
use Illuminate\Foundation\Support\Providers\AuthServiceProvider as ServiceProvider;
use Laravel\Passport\Bridge\RefreshTokenRepository;
use Laravel\Passport\Passport;
use League\OAuth2\Server\AuthorizationServer;
class AuthServiceProvider extends ServiceProvider
{
/**
* The policy mappings for the application.
*
* @var array
*/
protected $policies = [
'App\Model' => 'App\Policies\ModelPolicy',
];
/**
* Register any authentication / authorization services.
*
* @return void
*/
public function boot()
{
$this->registerPolicies();
app(AuthorizationServer::class)->enableGrantType(
$this->makeFacebookGrant(), Passport::tokensExpireIn()
);
Passport::routes();
//
}
/**
* Create and configure a Facebook grant instance.
*
* @return FacebookGrant
*/
protected function makeFacebookGrant()
{
$grant = new FacebookGrant(
$this->app->make(RefreshTokenRepository::class)
);
$grant->setRefreshTokenTTL(Passport::refreshTokensExpireIn());
return $grant;
}
}