web-dev-qa-db-fra.com

Pourquoi les informations d'identification du client doivent-elles être associées à un utilisateur dans Laravel Passport?

Je souhaite utiliser les informations d'identification du client pour authentifier les applications clientes pour accéder à l'API.

Mon problème est avec la création des informations d'identification du client. En utilisant php artisan passport:client me demande de saisir un user_id pour associer le client à cet utilisateur. Je ne comprends pas. Pourquoi l'application cliente doit être associée à un utilisateur?! Ou existe-t-il un autre moyen?

passport: la commande client prend uniquement en charge la création de clients de mot de passe et de client de subvention personnel. Je ne pense pas que l'un d'eux soit ce dont j'ai besoin.

Ce dont j'ai vraiment besoin, c'est de créer des informations d'identification client qui ne seront utilisées que par l'application cliente pour s'autoriser à accéder à certaines API. Comment faire ça?

14
Meena Alfons

Je suppose que vous souhaitez utiliser l'authentification machine à machine (aucune interaction utilisateur)

Je recommanderais de lire les documents plusieurs fois pour comprendre.

Je ne crois pas qu'il existe un moyen spécifique de créer un client d'informations d'identification client uniquement. Ce que je fais est de créer un client personnel, puis de modifier le champ du client personnel dans la base de données personal_access_client1 => 0

Vous pouvez utiliser l'option client personnel, comme le montre le --help option

Usage:
  passport:client [options]

Options:
      --personal        Create a personal access token client
      --password        Create a password grant client
      --name[=NAME]     The name of the client
  -h, --help            Display this help message
...

php artisan passport:client --personal

sortie

Personal access client created successfully.
Client ID: 1
Client Secret: LbjQNxK5SQZ3pPrEBUwbkE8vaRkg8jh25Qh43HYy

Vous devrez utiliser un autre middleware autre que celui par défaut car il n'y a aucun utilisateur présent lors de l'utilisation de cette méthode

  • Définir le middleware d'alias des informations d'identification du client dans le noyau
  • Ajouter un middleware au routage
  • Envoyer une demande

Définissez le middleware des informations d'identification du client sur le noyau http

Classe \App\Http\Kernel:

 protected $routeMiddleware = [
        'auth' => \Illuminate\Auth\Middleware\Authenticate::class,
        'client_credentials' => \Laravel\Passport\Http\Middleware\CheckClientCredentials::class,
        //ommited
    ];

Définir le middleware sur la route

Route::get('/test', 'ApiTestController@test')->middleware('client_credentials');

Classe \App\Http\Controllers\ApiTestController:

public function test() {
        return response()->json(['data' => 'hey'] );
}

De php artisan route:list

GET|HEAD  | api/test | App\Http\Controllers\ApiTestController@test   | api,client_credentials  |

Envoyer une demande

Suite à la demande spécifiée dans la documentation sur client-credentials-grant-tokens

J'utilise Postman pour plus de simplicité, envoie facilement une demande de test avec Postman (www.getpostman.com)

Définissez l'autorisation sur OAuth 2.0, image: authentification Postman

Définissez l'URL du jeton d'accès, l'ID du client, le secret du client et le type d'octroi sur 'Informations d'identification du client', image: Postman OAuth Fields

Postman crée un jeton et l'ajoute à l'URL ou à l'en-tête, dans ce cas l'en-tête

Accept:application/json
Authorization:Bearer eyJ0eXAiOi...KCjK0

Réponse:

{
  "data": "hey"
}
8
Raldo94

J'allais commenter mais je n'ai pas encore assez de réputation = p

Vous pouvez donner à la commande un paramètre de nom qui ne nécessitera aucune entrée utilisateur. En ce qui concerne la façon dont vous obtiendriez ce secret client sans intervention manuelle, c'est là que la vraie magie entrerait en jeu.

php artisan passport:client --personal --name={someName}

Cette commande vous donnerait toujours:


Personal access client created successfully.
Client ID: 1
Client Secret: LbjQNxK5SQZ3pPrEBUwbkE8vaRkg8jh25Qh43HYy

comme prévu.

2
waaffles