Access Tokens
Proteger rutas: Client Grant Type Tokens
Proporcionar acceso a un cliente válido en el sistema sin necesidad de que esté autorizado por un usuario, así cualquier cliente registrado va a poder acceder a esas rutas. Sin embargo, al no tener autorización de un usuario específico, no se tiene un control sobre si realmente por medio de ese token se puede hacer determinada acción.
Entonces para realizar las peticiones se requiere únicamente de las credenciales del cliente
Registrar middleware client_credentials en app/Http/Kernel.php
protected $routeMiddleware = [
...
'client.credentials' => \Laravel\Passport\Http\Middleware\CheckClientCredentials::class,
...
];
Proteger las rutas básicas del sistema: lista de productos, info de un producto, etc, para esto se puede
Registrar middleware en controladores que lo requieran para métodos index y/o show según sea el caso:
class CategoryController extends ApiController
{
public function __construct()
{
$this->middleware('client.credentials')->only(['index', 'show']);
$this->middleware('transform.input:' . CategoryTransformer::class)->only(['store', 'update']);
}
...
}
o si se desea proteger todos los métodos de los controladores, hacerlo directamente en el archivo de rutas
Route::middleware('client.credentials')->group(function () {
Route::resource('categories', 'ApiControllers\v1\CategoryController', ['only' => ['index', 'show']]);
});
Al enviar petición a alguna de las rutas protegidas obtenemos:
{
"error": "Unauthenticated",
"code": 401
}
Para obtener autorización se debe usar un cliente válido en la API para obtener un access token:
Crear cliente
Nota: no es necesario asignar a un usuario, se puede colocar cualquier cosa (como 0)
php artisan passport:client
Which user ID should the client be assigned to?:
> 0
What should we name the client?:
> cliente
Where should we redirect the request after authorization? [http://localhost/auth/callback]:
>
New client created successfully.
Client ID: 3
Client secret: EggaIpAEZRorCwYHg6Z77Gh1rm3XEW0n3hKaGvLC
Obtener access token para usuario creado
Hacer post a la ruta oauth/token con client_id y client_secret
Usar token al hacer peticiones, enviarlo con la cabecera Authorization y el método Bearer seguido de un espacio y el token

Proteger rutas: Otros Grant Type Tokens
En este caso, las peticiones sean realizadas con un token que esté relacionado con un usuario válido en el sistema. Existen varios tokens que cumplen con esta condición: password token, personal token (de cada usuario), token implícito, y el tradicional de código de autorización.
En el controalador base del sistema ApiController, en el constructor usar un middeware
public function __construct()
{
$this->middleware('auth:api'); // middleware: auth, guard: api
}
En los otros controladores (que no hacen uso del client credentials) llamar al constructor padre (antes descrito) para implementar el middleware
public function __construct()
{
parent::__construct();
}
Para los que hacen uso de client credentials en algunos métodos, proteger los restantes con auth:api
public function __construct()
{
$this->middleware('client.credentials')->only(['index', 'show']);
$this->middleware('auth:api')->except(['index', 'show']);
...
}
En UserController, se debe exceptuar de validaciones al método verify, pues este es llamado cuando el usuario hace click sobre el enlace de verificación que le fue enviado al correo y no hay manera de que envíe algún token
class UserController extends ApiController
{
public function __construct()
{
$this->middleware('client.credentials')->only(['store', 'resend']);
$this->middleware('auth:api')->except(['store', 'resend', 'verify']);
...
}
}
Password Grant Tokens
Para obtener un access token con información del usuario, se requiere información tanto del cliente como del usuario directamente en el cuerpo de la petición.
Crear cliente con tipo password
php artisan passport:client --password
What should we name the password grant client? [API RESTful Password Grant Client]:
> password
Password grant client created successfully.
Client ID: 4
Client Secret: UMtrV0nDrnilDQVErHbDNttOHNJgpLbLK6IibyQm
Obtener access token para usuario creado

Usar token para las peticiones

Personal Access Tokens
El access token personal nunca expira, se recomienda ser usado con fines de prueba o para proporcionar cierto acceso al usuario.
Crear cliente con tipo password
php artisan passport:client --personal
What should we name the personal access client? [API RESTful Personal Access Client]:
>
Personal access client created successfully.
Client ID: 5
Client Secret: YGjw5OCy2Us2uV53SqQnV45Is3j9RG6bfFgaYHLu
Access Token por medio de Código de Autorización
El usuario se autentica en el sistema y en caso de que autorice y su autenticación sea correcta, el cliente podrá obtener el access token sin necesidad de conocer los datos del usuario.
Es el grant type más utilizado por Facebook, Twitter, etc.
Last updated
Was this helpful?