1

尝试根据本手册实现自定义授权服务提供者:

https://github.com/mikemclin/passport-custom-request-grant

在里面,register method我们得到了 auth server 实例(使用 helper 方法),然后使用 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 查询 - 使用另一个范围。

4

1 回答 1

1

我知道这个答案可能会迟到,但我找到了解决这个要求的方法。

我只是将授权添加到我的 AuthServiceProvider 中的服务器,并将授权逻辑提取到授权类以保持清洁。

您可以检查 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;
    }
}
于 2017-02-03T05:15:15.640 回答