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?
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_client
1
=> 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
Classe \App\Http\Kernel
:
protected $routeMiddleware = [
'auth' => \Illuminate\Auth\Middleware\Authenticate::class,
'client_credentials' => \Laravel\Passport\Http\Middleware\CheckClientCredentials::class,
//ommited
];
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 |
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"
}
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.