Проблемы с аутентификацией паспортов Laravel при использовании развязанного клиента vuejs - PullRequest
0 голосов
/ 30 октября 2019

Здравствуйте, коллеги, разработчики, мне нужна ваша мудрость

Я создаю API laravel с процессом аутентификации oauth2 (поток кода авторизации паспорта), используемым клиентом, отделенным от Vuejs, и я не могу пройти аутентификацию через обычный процесс(401 Unauthenticated).

Если я попытаюсь с видами блейд-проекта laravel, он будет работать, как и ожидалось, но как только я попытаюсь сделать отдельный проект для внешнего интерфейса, я получу ошибку 401 Unauthenticated при получениик маршруту oauth / authorize, и я не могу получить информацию о том, что не так, поэтому я не могу идти дальше в моем проекте.

Пока я даже не использую входные данные, я просто отправляю запросМне нужно: (конечно, я отправляю параметры, которые соответствуют тем, которые у меня есть в базе данных клиента oauth)

    public function authorizeTpp(Request $request)
    {
        $query = http_build_query([
            'client_id' => '3',
            'redirect_uri' => 'http://api.dirapp.test/auth/callback',
            'response_type' => 'code',
            'scope' => '*',
        ]);

        return redirect('http://api.dirapp.test/oauth/authorize?'.$query);
    }

Вот мой AuthServiceProvider:

    public function boot()
    {
        $this->registerPolicies();

        Passport::routes();
    }

Вот мое ядро:

    protected $middleware = [
        \App\Http\Middleware\TrustProxies::class,
        \App\Http\Middleware\CheckForMaintenanceMode::class,
        \Illuminate\Foundation\Http\Middleware\ValidatePostSize::class,
        \App\Http\Middleware\TrimStrings::class,
        \Illuminate\Foundation\Http\Middleware\ConvertEmptyStringsToNull::class,
    ];

    protected $middlewareGroups = [
        'web' => [
            \App\Http\Middleware\EncryptCookies::class,
            \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
            \Illuminate\Session\Middleware\StartSession::class,
            // \Illuminate\Session\Middleware\AuthenticateSession::class,
            \Illuminate\View\Middleware\ShareErrorsFromSession::class,
            \App\Http\Middleware\VerifyCsrfToken::class,
            \Illuminate\Routing\Middleware\SubstituteBindings::class,
            CreateFreshApiToken::class,
        ],

        'api' => [
            'throttle:60,1',
            'bindings',
        ],
    ];

А вот мои маршруты: web.php:

Auth::routes();
Route::get('auth/callback', 'Auth\LoginController@authCallback');

api.php:

Route::get('authorize', 'Auth\LoginController@authorizeTpp');

и маршруты:

+--------+----------+-----------------------------------------+-----------------------------------+---------------------------------------------------------------------------+--------------+
| Domain | Method   | URI                                     | Name                              | Action                                                                    | Middleware   |
+--------+----------+-----------------------------------------+-----------------------------------+---------------------------------------------------------------------------+--------------+
|        | GET|HEAD | api/authorize                           |                                   | App\Http\Controllers\Auth\LoginController@authorizeTpp                    | api,guest    |
|        | POST     | api/create-client                       |                                   | App\Http\Controllers\HomeController@createOauthClient                     | api          |
|        | POST     | api/create-user                         |                                   | App\Http\Controllers\HomeController@createUser                            | api          |
|        | GET|HEAD | api/user                                |                                   | Closure                                                                   | api,auth:api |
|        | GET|HEAD | auth/callback                           |                                   | App\Http\Controllers\Auth\LoginController@authCallback                    | web,guest    |
|        | GET|HEAD | home                                    | home                              | App\Http\Controllers\HomeController@index                                 | web          |
|        | POST     | login                                   |                                   | App\Http\Controllers\Auth\LoginController@login                           | web,guest    |
|        | GET|HEAD | login                                   | login                             | App\Http\Controllers\Auth\LoginController@showLoginForm                   | web,guest    |
|        | POST     | logout                                  | logout                            | App\Http\Controllers\Auth\LoginController@logout                          | web          |
|        | GET|HEAD | oauth/authorize                         | passport.authorizations.authorize | Laravel\Passport\Http\Controllers\AuthorizationController@authorize       | web,auth     |
|        | POST     | oauth/authorize                         | passport.authorizations.approve   | Laravel\Passport\Http\Controllers\ApproveAuthorizationController@approve  | web,auth     |
|        | DELETE   | oauth/authorize                         | passport.authorizations.deny      | Laravel\Passport\Http\Controllers\DenyAuthorizationController@deny        | web,auth     |
|        | POST     | oauth/clients                           | passport.clients.store            | Laravel\Passport\Http\Controllers\ClientController@store                  | web,auth     |
|        | GET|HEAD | oauth/clients                           | passport.clients.index            | Laravel\Passport\Http\Controllers\ClientController@forUser                | web,auth     |
|        | PUT      | oauth/clients/{client_id}               | passport.clients.update           | Laravel\Passport\Http\Controllers\ClientController@update                 | web,auth     |
|        | DELETE   | oauth/clients/{client_id}               | passport.clients.destroy          | Laravel\Passport\Http\Controllers\ClientController@destroy                | web,auth     |
|        | GET|HEAD | oauth/personal-access-tokens            | passport.personal.tokens.index    | Laravel\Passport\Http\Controllers\PersonalAccessTokenController@forUser   | web,auth     |
|        | POST     | oauth/personal-access-tokens            | passport.personal.tokens.store    | Laravel\Passport\Http\Controllers\PersonalAccessTokenController@store     | web,auth     |
|        | DELETE   | oauth/personal-access-tokens/{token_id} | passport.personal.tokens.destroy  | Laravel\Passport\Http\Controllers\PersonalAccessTokenController@destroy   | web,auth     |
|        | GET|HEAD | oauth/scopes                            | passport.scopes.index             | Laravel\Passport\Http\Controllers\ScopeController@all                     | web,auth     |
|        | POST     | oauth/token                             | passport.token                    | Laravel\Passport\Http\Controllers\AccessTokenController@issueToken        | throttle     |
|        | POST     | oauth/token/refresh                     | passport.token.refresh            | Laravel\Passport\Http\Controllers\TransientTokenController@refresh        | web,auth     |
|        | GET|HEAD | oauth/tokens                            | passport.tokens.index             | Laravel\Passport\Http\Controllers\AuthorizedAccessTokenController@forUser | web,auth     |
|        | DELETE   | oauth/tokens/{token_id}                 | passport.tokens.destroy           | Laravel\Passport\Http\Controllers\AuthorizedAccessTokenController@destroy | web,auth     |
|        | POST     | password/email                          | password.email                    | App\Http\Controllers\Auth\ForgotPasswordController@sendResetLinkEmail     | web,guest    |
|        | GET|HEAD | password/reset                          | password.request                  | App\Http\Controllers\Auth\ForgotPasswordController@showLinkRequestForm    | web,guest    |
|        | POST     | password/reset                          | password.update                   | App\Http\Controllers\Auth\ResetPasswordController@reset                   | web,guest    |
|        | GET|HEAD | password/reset/{token}                  | password.reset                    | App\Http\Controllers\Auth\ResetPasswordController@showResetForm           | web,guest    |
|        | GET|HEAD | register                                | register                          | App\Http\Controllers\Auth\RegisterController@showRegistrationForm         | web,guest    |
|        | POST     | register                                |                                   | App\Http\Controllers\Auth\RegisterController@register                     | web,guest    |
+--------+----------+-----------------------------------------+-----------------------------------+---------------------------------------------------------------------------+--------------+

При использовании intПри просмотре блочных лезвий я могу пройти весь процесс, перейти к маршруту oauth / authorize, получить представление «authorize», где я могу проверить или отменить регистрацию клиента, затем перейти к oauth / token по маршруту обратного вызова и затем получитьМой пользователь прошел проверку подлинности и перенаправлен на домашнюю страницу.

Как только я пытаюсь получить те же результаты с внешним / отделенным проектом внешнего интерфейса (Vuejs), маршрут oauth / authorize выдает ошибку 401 Неаутентифицированный при использовании того же самогоучетные данные.

Я не знаю, связано ли это или нет, но когда я использую разъединенный клиент, у меня больше нет сеанса, и я теряю 'required_url', обычно используемый процессом auth для выполненияправильное перенаправление, и это приводит меня к главной странице вместо этого. Чтобы это исправить, мой API отправляет моему клиенту правильный закодированный предназначен_url, чтобы я мог при необходимости отправить его обратно в функцию входа в систему и перейти к реальному значению_предназначения после процесса аутентификации.

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...