Como Configurar o Laravel Passport

(Bônus: customizando as credenciais de acesso)

Photo by Richard Payette on Unsplash

Se você chegou até aqui muito provavelmente já sabe o que é o Passport e para quê ele serve. Mas, vamos fazer um breve resumo para os desavisados:

Passport provê autenticação para APIs via PHP OAuth 2.0 Server. Utilizando o Passport você terá toda a implementação de um servidor OAuth 2.0 em questão de minutos

Caso você tenha dúvidas sobre o que é OAuth 2.0, está é uma fonte inicial bem interessante.

Basicamente, utilizamos o Passport quando queremos abstrair o gerenciamento de tokens de acesso à nossa API.

Vamos ao que interessa

Podemos utilizar o composer para instalar o Passport com o seguinte comando:

composer require laravel/passport

Se você estiver utilizando uma base de dados relacional, execute o seguinte comando para criar as tabelas que serão utilizadas pelo Passport para gerenciar seus clientes e tokens de acesso:

php artisan migrate

Caso esteja utilizando uma base de dados não relacional, como o MongoDB, este passo é opcional.

Em seguida vamos utilizar o comando passport:install para executar o script que gera as chaves de criptografia utilizadas para criar tokens seguros e ainda criar dois clientes: um “personal access client” e um “password grant client”.

Vale ressaltar que “cliente” para o Passport não é a mesma coisa que usuário. Simplificando, um cliente possui vários usuários e cada usuário se conecta a um cliente. O usuário vai utilizar um cliente para acessar a sua aplicação.

php artisan passport:install

Agora é necessário adicionar o trait Laravel\Passport\HasApiTokens ao seu model App\User. Este trait vai adicionar diversos métodos auxiliares ao seu model que vão te permitir inspecionar o usuário autenticado pelo token e seus escopos.

Seu model User deve ficar assim:

<?php namespace App;
use Laravel\Passport\HasApiTokens;
use Illuminate\Notifications\Notifiable;
use Illuminate\Foundation\Auth\User as Authenticatable;
class User extends Authenticatable
{
use HasApiTokens, Notifiable;
    // ... resto do código do seu model
}

O próximo passo é adicionar a chamada às rotas do Passport no método boot do AuthServiceProvider. Este método faz o registros das rotas de acesso e criação de tokens e clientes para você.

<?php namespace App\Providers;
use Laravel\Passport\Passport;
use Illuminate\Support\Facades\Gate;
use Illuminate\Foundation\Support\Providers\AuthServiceProvider as ServiceProvider;
class AuthServiceProvider extends ServiceProvider
{
/**
* The policy mappings for the application.
*
* @var array
*/
protected $policies = [
‘App\Model’ => ‘App\Policies\ModelPolicy’,
];
 /**
* Register any authentication / authorization services.
*
* @return void
*/
public function boot()
{
$this->registerPolicies();
Passport::routes();
}
}

Por fim, no arquivo config/auth.php, vamos configurar o driver de autenticação da api para que o Passport seja utilizado. Isso instrui sua aplicação a utilizar o TokenGuard do Passport quando alguma requisição de autenticação vier para a sua API.

É isso, você já pode utilizar o Passport para criar e gerenciar seus tokens de acesso.

Bônus: customizando as credenciais de acesso

Digamos que você já possui uma aplicação web em que seus usuários podem se autenticar via CPF ou e-mail (caso real). Logicamente você vai querer que na sua API os dois métodos de autenticação também funcionem. Porém, infelizmente o Passport não traz em sua documentação uma forma de configurar isso facilmente.

Depois de muita pesquisa no StackOverflow chegamos a esta solução:

Além das outras configurações já mencionadas do seu model User. Adicione o seguinte método:

public function findForPassport($identifier)
{
return $this->orWhere(‘cpf’, $identifier)->orWhere(‘email’, $identifier)->first();
}

Este é um dos métodos auxiliares que mencionamos lá no início. Ele recebe um identificador como parâmetro e, utilizando uma query do Eloquent ORM do Laravel ele busca algum usuário que possua este identificador como ‘cpf’ ou como ‘e-mail’. Aqui é possível trocar o CPF por username ou qualquer outro campo da sua tabela de usuário.

Agradeço pelo tempo que você gastou com essa leitura, confira outros tutoriais de Laravel, JavaScript e Docker aqui nas publicações da Sysvale. Não esqueça de recomendar este tutorial para os amigos e deixar um aplauso, caso tenha gostado.

Fontes