Паспорт Laravel oauth маршруты всегда возвращают 401 несанкционированных - PullRequest
0 голосов
/ 24 мая 2018

Я пытаюсь реализовать oauth-аутентификацию с помощью паспорта, но не могу заставить ее работать должным образом.

Я хочу, чтобы мой API работал с простым jwt и добавил другой oauth-api для сторонних приложений..

Моя проблема в том, что когда я пытаюсь получить доступ к любому из oauth/* маршрутов (например, oauth/authorize), я получаю ответ {"message":"Unauthorized.","success":false}

Я не знаю, что не такв моей реализации, и я застрял в этой ошибке на один день.

Мои охранники:

'guards' => [
    'web' => [
        'driver' => 'jwt',
        'provider' => 'myappprovider',
    ],
    'api' => [
        'driver' => 'jwt',
        'provider' => 'myappprovider',
    ],
    'oauth-api' => [
        'driver' => 'passport',
        'provider' => 'myappprovider'
    ]
],

Вот мой AuthServiceProvider:

class AuthServiceProvider extends ServiceProvider{

/**
 * Register any application authentication / authorization services.
 *
 * @param  \Illuminate\Contracts\Auth\Access\Gate  $gate
 * @return void
 */
public function boot(GateContract $gate)
{
    Passport::routes();

    // Create auth user provider
    Auth::provider('myapp', function($app)
    {
        $repository = app()->make('\MyApp\User\Repository\UserRepository');
        return new AuthUserProvider($repository);
    });

    // Create auth driver
    Auth::extend('jwt', function($app, $name, array $config)
    {
        $provider = Auth::createUserProvider($config['provider']);
        return new JwtAuthGuard($name, $provider);
    });

    parent::registerPolicies($gate);

}}

AppKernel:

class Kernel extends HttpKernel{
/**
 * The application's global HTTP middleware stack.
 *
 * These middleware are run during every request to your application.
 *
 * @var array
 */
protected $middleware = [
    \Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode::class,
];

/**
 * The application's route middleware groups.
 *
 * @var array
 */
protected $middlewareGroups = [
    //
    'api' => [
        //'throttle:60,1',
        'auth:api'
    ],
    'web' => [
        'language' => \App\Http\Middleware\Language::class
    ],
    'oauth-api' => [
        'auth:oauth-api'
    ]
];

/**
 * The application's route middleware.
 *
 * These middleware may be assigned to groups or used individually.
 *
 * @var array
 */
protected $routeMiddleware = [
    'auth' => \App\Http\Middleware\Authenticate::class,
    'role' => \App\Http\Middleware\RoleMiddleware::class,
    'session' => \Illuminate\Session\Middleware\StartSession::class,
    'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
    'ip' => \App\Http\Middleware\IPMiddleware::class
];}

Мой класс аутентификации:

class Authenticate{
/**
 * Handle an incoming request.
 *
 * @param  \Illuminate\Http\Request  $request
 * @param  \Closure  $next
 * @param  string|null  $guard
 * @return mixed
 */
public function handle($request, Closure $next, $guard = null)
{
    if (Auth::guard($guard)->guest())
    {
        return response()->json([
            'message' => 'Unauthorized.',
            'success' => false
        ], 401);
    }

    return $next($request);
}}

1 Ответ

0 голосов
/ 16 августа 2018

OAuth2 работает с согласия пользователя, поэтому имеет веб-интерфейс и промежуточное программное обеспечение для аутентификации.Do

php artisan route: list

, он покажет вам список маршрутов с промежуточным ПО.Следующая ссылка лучше объяснит https://stackoverflow.com/a/40999998/3377733

...