Laravel Passport -> аутентификация пользователя микросервиса

#php #laravel #oauth

#php #laravel #oauth

Вопрос:

Для приложения я создал кучу микросервисов и шлюз. Шлюз получает запрос и собирает данные из giroservices. Все работает нормально.

Шлюз принимает все запросы и проверяет их подлинность с помощью Laravel Passport. Итак, на шлюзе установлен Laravel Passport.

 [gateway]/users/login accepts the login parameters: 
[users]/users/verify login details and returns user object. All works fine. 
 

UserController.php

 public function login(Request $request){

        $rules = [
            'email'     => 'required|email:rfc',
            'password'  => 'required|min:8',
        ];

        $user = $this->userService->verifyUser(['email'=> $request->email, 'password'=> $request->password]);


        return $this->successResponse(['token'=>$token], Response::HTTP_OK);
    }
 

$user Имеет полный пользовательский json, включая UUID. Я хочу прикрепить этот UUID Laravel Passports OAuth. Так что, когда пользователь проходит аутентификацию, я могу абстрагировать пользовательский UUID и использовать его для следующих запросов.

{"data":{"uuid":"94b55bed-f084-468a-a2a7-51d38e96aed3","first_name":"John","last_name":"Due","locale":"en","email":"JohnDoe@mail.com","created_at":"2020-12-10T09:40:46.000000Z","updated_at":"2020-12-10T09:40:46.000000Z"}}

Очевидно, я понимаю, что json_decode это, но как вручную создать токен доступа в Laravel Passport. Как бы я это сделал?

Ответ №1:

Вы можете создать токен доступа, используя предоставленные паролем client_id и client_secret вместе с учетными данными пользователя. Вы можете сделать это, используя маршрут /oauth/token в службе, которая содержит логику passport .

Здесь из документации

 Creating A Password Grant Client
Before your application can issue tokens via the password grant, you will need to create a password grant client. You may do this using the passport:client Artisan command with the --password option. If you have already run the passport:install command, you do not need to run this command:

php artisan passport:client --password
Requesting Tokens
Once you have created a password grant client, you may request an access token by issuing a POST request to the /oauth/token route with the user's email address and password. Remember, this route is already registered by the Passport::routes method so there is no need to define it manually. If the request is successful, you will receive an access_token and refresh_token in the JSON response from the server:

use IlluminateSupportFacadesHttp;

$response = Http::asForm()->post('http://passport-app.com/oauth/token', [
    'grant_type' => 'password',
    'client_id' => 'client-id',
    'client_secret' => 'client-secret',
    'username' => 'taylor@laravel.com',
    'password' => 'my-password',
    'scope' => '',
]);

return $response->json();
 

который можно найти здесь.

https://laravel.com/docs/8.x/passport#creating-a-password-grant-client