Здравствуйте, коллеги, разработчики, мне нужна ваша мудрость
Я создаю 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, чтобы я мог при необходимости отправить его обратно в функцию входа в систему и перейти к реальному значению_предназначения после процесса аутентификации.
Я не знаю, что яЯ делаю что-то не так, и мне нужна помощь, я думаю, что я мог неправильно понять, как работает паспорт, но я не могу получить много информации о процессе прохождения кода авторизации через отсоединенного клиента.
Я потратил несколькодней без успеха, так что если у вас есть какая-либо информация или вы можете мне помочь, это было бы здорово. Спасибо.