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

Al enviar petición a alguna de las rutas protegidas obtenemos:

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)

  • 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

En los otros controladores (que no hacen uso del client credentials) llamar al constructor padre (antes descrito) para implementar el middleware

Para los que hacen uso de client credentials en algunos métodos, proteger los restantes con auth:api

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

  • 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

  • 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

  • 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?