Когда пользователь входит в мой Foo SPA, он перенаправляется на внутреннюю страницу входа Laravel для получения кода доступа и токена через Laravel Passport GET route oauth/authorize
. Когда пользователь входит в систему, по какой-то причине он не использует поставщика пользователя, установленного в таблице Passport oauth_clients
, установленной для этого SPA.
Что не так, моя конфигурация ниже?
Guard устанавливается в config/auth.php
:
'api-foo' => [
'driver' => 'passport',
'provider' => 'users-foo'
]
Поставщик в config/auth.php
:
'users-foo' => [
'driver' => 'eloquent',
'model' => App\Models\Foo\User::class,
],
Модель пользователя App/Models/Foo/User.php
:
<?php
namespace App\Models\Foo;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Foundation\Auth\User as Authenticatable;
use Illuminate\Notifications\Notifiable;
use Laravel\Passport\HasApiTokens;
class User extends Authenticatable
{
use HasApiTokens, Notifiable;
/**
* The connection name for the model.
*
* @var string
*/
protected $connection = 'foo';
/**
* The table associated with the model.
*
* @var string
*/
protected $table = 'foo.users';
}
An запись в таблице oauth_clients
:
+----+---------+------+--------+----------+------------------------------------+------------------------+-----------------+---------+
| id | user_id | name | secret | provider | redirect | personal_access_client | password_client | revoked |
+----+---------+------+--------+----------+------------------------------------+------------------------+-----------------+---------+
| 2 | | Foo | *** | api-foo | http://foo.test:3001/auth/callback | false | false | false |
+----+---------+------+--------+----------+------------------------------------+------------------------+-----------------+---------+
Примечание. Я не использую токен предоставления пароля, потому что он небезопасен и устарел в соответствии с рекомендациями oauth. net.
=== РЕДАКТИРОВАТЬ ===
Процесс входа в систему начинается так:
GET {backend}/oauth/authorize
:
http://backend.test/oauth/authorize
?protocol=oauth2
&response_type=code
&access_type
&client_id=2
&redirect_uri=
http%3A%2F%2Ffoo.test%3A3001%2Fauth%2Fcallback
&scope=*
&state=nL2aLxjUivVpsqeyaA9KP
&code_challenge_method=implicit
Предоставляется
client_id
, поэтому он может получить защиту аутентификации от провайдера в таблице oauth_clients
. Но я могу найти, где хранятся эти данные, в следующем запросе, чтобы установить защиту в моем app/Http/Controllers/Auth/LoginController.php
методе attemptLogin()
.
GET {backend}/login
Введите login
и password
POST {backend}/login
GET {backend}/oauth/authorize
http://backend.test/oauth/authorize
?access_type=
&client_id=2
&code_challenge_method=implicit
&protocol=oauth2
&redirect_uri=
http%3A%2F%2Ffoo.test%3A3001%2Fauth%2Fcallback
&response_type=code
&scope=%2A
&state=NzAefK__Rr--9Q5dX8oRo
GET {spa}/auth/callback
http://foo.test:3001/auth/callback
?code=def***3c1
&state=nL2aLxjUivVpsqeyaA9KP
GET {backend}/api/user
http://backend.test/api/user