Quiero usar Credenciales de cliente para autenticar aplicaciones cliente para acceder a la API.
Mi problema es con la creación de credenciales de cliente. El uso del php artisan passport:client requiere que ingrese un ID de usuario para asociar el cliente a ese usuario. no lo entiendo ¿Por qué la aplicación cliente tiene que estar asociada a un usuario? ¿O hay otra manera?
El comando pasaporte: cliente solo admite la creación de clientes de concesión de contraseña y clientes de concesión personal. No creo que ninguno de ellos sea lo que necesito.
Lo que realmente necesito es crear credenciales de cliente que solo serán utilizadas por la aplicación cliente para autorizarse a sí misma para acceder a algunas API. ¿Como hacer eso?
Supongo que desea utilizar la autenticación de máquina a máquina (sin interacciones del usuario)
Recomendaría leer los documentos un par de veces para acostumbrarse.
No creo que haya una forma específica de crear un solo cliente de credenciales de cliente, lo que hago es crear un cliente personal y luego cambiar el campo para cliente personal en la base de datos personal_access_client 1 => 0
Puede usar la opción de cliente personal, como se ve en la opción --help
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
producción
Personal access client created successfully. Client ID: 1 Client Secret: LbjQNxK5SQZ3pPrEBUwbkE8vaRkg8jh25Qh43HYyNecesitará usar otro middleware que no sea el predeterminado porque no hay ningún usuario presente al usar este método
Clase \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'); Clase \App\Http\Controllers\ApiTestController :
public function test() { return response()->json(['data' => 'hey'] ); } Desde php artisan route:list
GET|HEAD | api/test | App\Http\Controllers\ApiTestController@test | api,client_credentials |Siguiendo la solicitud especificada en la documentación sobre client-credentials-grant-tokens
Uso Postman por simplicidad, envío fácilmente una solicitud de prueba con Postman (www.getpostman.com)
Establezca la autorización en OAuth 2.0, imagen: Autenticación de cartero
Establezca la URL del token de acceso, la identificación del cliente, el secreto del cliente y el tipo de concesión en 'Credenciales del cliente', imagen: Campos OAuth del cartero
El cartero crea un token y lo agrega a la URL o al encabezado, en este caso, al encabezado.
Accept:application/json Authorization:Bearer eyJ0eXAiOi...KCjK0Respuesta:
{ "data": "hey" }Estas respuestas son un poco viejas.
Ciertamente puede agregar credenciales de cliente.
php artisan passport:client --client protected $signature = 'passport:client {--personal : Create a personal access token client} {--password : Create a password grant client} {--client : Create a client credentials grant client} {--name= : The name of the client} {--provider= : The name of the user provider} {--redirect_uri= : The URI to redirect to after authorization } {--user_id= : The user ID the client should be assigned to } {--public : Create a public client (Auth code grant type only) }';Iba a comentar pero aun no tengo suficiente reputacion =p
Puede darle al comando un parámetro de nombre que no requiera ninguna entrada del usuario. En cuanto a cómo le pasaría ese secreto de cliente a su cliente sin intervención manual, es donde entraría la verdadera magia.
php artisan passport:client --personal --name={someName}Ese comando todavía te daría:
Personal access client created successfully. Client ID: 1 Client Secret: LbjQNxK5SQZ3pPrEBUwbkE8vaRkg8jh25Qh43HYycomo se esperaba.