✅ Notícias, temas e plug-ins da WEB e do WordPress. Aqui compartilhamos dicas e as melhores soluções para sites.

Como usar o Laravel Passport para autenticação REST API

513

No desenvolvimento da web de hoje, APIs ou serviços da web são muito populares. Durante o desenvolvimento de um aplicativo móvel, a API desempenha um papel de ponte para a passagem de dados entre o aplicativo móvel e a web. Manter as chamadas de APIs seguras e autenticadas é importante para proteger os dados que estão sendo transferidos entre aplicativos.

Neste artigo, estudamos o Passaporte Laravel que nos permite autenticar APIs. O Passport é construído na parte superior do servidor OAuth2, que é muito mais seguro na forma como é construído.

Ao lidar com as APIs, costumávamos enviar um token de acesso para verificar se a solicitação recebida é válida. Se for autorizado, apenas deve permitir a interação com o aplicativo. O passaporte Laravel fornece uma maneira conveniente de criar e verificar token em relação à chamada API.

Instalação

Para começar, presumimos que você instalou o Laravel em seu sistema. Para instalar o Passport, execute o comando abaixo no terminal.

composer require laravel/passport

O comando acima funcionaria com a última versão do Laravel. Se você estiver executando uma versão mais antiga, o comando será um pouco diferente dependendo da sua versão do Laravel. Por exemplo, se o Laravel 5.5 estiver instalado, seu comando deve ser:

composer require laravel/passport=~4.0

Este comando cria seu próprio diretório de migração de banco de dados. Essas migrações criarão tabelas que armazenam os clientes e tokens de acesso.

Em seu config/app.phparquivo, registre o provedor de serviços do Passport na matriz de provedores.

config / app.php

'providers' =>[
  ....
  LaravelPassportPassportServiceProvider::class,
],

Vamos executar a migração que criará as tabelas do banco de dados para o Passport.

php artisan migrate

Agora, se você for ao seu cliente de banco de dados, notará as novas tabelas criadas em seu banco de dados.

Como usar o Laravel Passport para autenticação REST API

Em seguida, execute o comando abaixo que cria chaves de criptografia para gerar tokens de acesso seguro. O comando abaixo cria clientes de “acesso pessoal" e “concessão de senha” que estão sendo armazenados na tabela oauth_clients.

php artisan passport:install

Como usar o Laravel Passport para autenticação REST API

O usuário pode copiar esses tokens para as próximas etapas. Na verdade, veremos 2 maneiras de criar tokens de acesso. Uma é por meio de clientes de “concessão de senha” e outra é por autenticação de login.

Configuração de passaporte

Vá até os diretórios do Laravel e abra o AppUserarquivo de modelo. Neste arquivo, precisamos adicionar LaravelPassportHasApiTokenstraço.

app / User.php.

<?php
 
namespace App;
 
use LaravelPassportHasApiTokens;
use IlluminateNotificationsNotifiable;
use IlluminateFoundationAuthUser as Authenticatable;
 
class User extends Authenticatable
{
    use HasApiTokens, Notifiable;
    ....
}

Depois disso, temos que chamar o Passport::routesmétodo no bootmétodo de AuthServiceProvider.

app / Providers / AuthServiceProvider.php

<?php
 
namespace AppProviders;
 
use LaravelPassportPassport;
use IlluminateSupportFacadesGate;
use IlluminateFoundationSupportProvidersAuthServiceProvider as ServiceProvider;
 
class AuthServiceProvider extends ServiceProvider
{
    /**
     * The policy mappings for the application.
     *
     * @var array
     */
    protected $policies = [
        'AppModel' => 'AppPoliciesModelPolicy',
    ];
 
    /**
     * Register any authentication / authorization services.
     *
     * @return void
     */
    public function boot()
    {
        $this->registerPolicies();
 
        Passport::routes();
    }
}

Por fim, no config/auth.phparquivo, defina a opção ‘driver’ da proteção de autenticação ‘api’ como ‘passaporte’ da seguinte forma:

config / auth.php

'guards' => [
    'web' => [
        'driver' => 'session',
        'provider' => 'users',
    ],
 
    'api' => [
        'driver' => 'passport',
        'provider' => 'users',
    ],
],

Crie a API REST e proteja-a com o Laravel Passport

O Laravel cria um arquivo routes/api.phponde devemos declarar nosso endpoint de APIs REST. Podemos proteger nossa API adicionando o middleware auth:apia ela.

routes / api.php

Route::get('/api/categories', 'ApiController@categories')->middleware('auth:api');

Para vários endpoints, não precisamos adicionar middleware todas as vezes. Em vez disso, podemos fazer da seguinte maneira:

Route::group(['middleware' => 'auth:api'], function(){
    Route::get('products', 'ApiController@products');
    Route::get('categories', 'ApiController@categories');
});

Como nossos ‘produtos’ de endpoint são protegidos se o chamarmos diretamente sem o token de autorização, obteremos uma resposta ‘Não autenticado’.

Como usar o Laravel Passport para autenticação REST API

Isso significa que, ao chamar a API, é essencial passar o token de autorização em cada solicitação. Portanto, o Passport verificará o token e retornará a resposta.

Gerar token de acesso para API

Existem várias maneiras de criar um token de acesso para o aplicativo. Veremos 2 deles para este tutorial.

Primeira opção

Em primeiro lugar, você deve fazer uma chamada para o / oauth / token com os parâmetros necessários e obterá o token em resposta.

Presumimos que você esteja usando uma biblioteca Guzzle HTTP para fazer solicitações de API. Digamos que você tenha outro projeto de onde está fazendo uma solicitação de API.

<?php
require_once "vendor/autoload.php";
 
use GuzzleHttpClient;
 
$client = new Client([
    // Base URI is used with relative requests
    'base_uri' => 'http://laravel.dev',
]);
 
$response = $client->post('/oauth/token', [
    'form_params' => [
        'grant_type' => 'password',
        'client_id' => '2',
        'client_secret' => '8qyKG7WKb3O3FZh2hUyEOZ3dAj5l9S5ljn2bdeJf',
        'username' => '[email protected]',
        'password' => 'my_password',
        'scope' => '*',
    ],
]);
 
$arr_result = json_decode((string) $response->getBody(), true);

O código acima retorna uma matriz que contém uma chave ‘access_token’. Os parâmetros client_id e client_secret que obtivemos quando executamos passport:install. Você também pode obter esses detalhes na tabela de banco de dados ‘oauth_clients’.

Tente novamente do carteiro passando o access_token para o endpoint ‘produtos’ e devemos obter a resposta.

Como usar o Laravel Passport para autenticação REST API

Na verdade, você precisa chamar esta API como a seguir:

$response = $client->get('/products', [
    'headers' => [
        'Authorization' => 'Bearer '.$access_token,
    ]
]);
 
$arr_result = json_decode((string) $response->getBody(), true);

Segunda opçao

Na primeira opção, você deve saber client_id e client_secret para gerar seu token. Essa pode não ser uma maneira conveniente em alguns cenários. O Passport oferece outra opção para gerar token de acesso apenas por meio de credenciais de login.

Em nosso ApiController.phpadicione o método de login com solicitação de postagem e escreva o código abaixo nele.

<?php
 
namespace AppHttpControllers;
 
use IlluminateHttpRequest;
use IlluminateSupportFacadesStorage;
use IlluminateSupportFacadesAuth;
 
class ApiController extends Controller
{
    public function login(){ 
        if(Auth::attempt(['email' => request('email'), 'password' => request('password')])){ 
            $user = Auth::user(); 
            $success['token'] =  $user->createToken('MyApp')-> accessToken; 
            return response()->json(['success' => $success], 200); 
        } 
        else{ 
            return response()->json(['error'=>'Unauthorised'], 401); 
        } 
    }

Para fazer esta chamada de API, precisamos registrar uma rota para ela.

routes / api.php

Route::post('login', 'ApiController@login');

O usuário pode fazer uma solicitação de postagem HTTP para esta API escrevendo o código abaixo:

$response = $client->post('/api/login', [
    'form_params' => [
        'email' => '[email protected]',
        'password' => 'my_password'
    ],
]);
 
$arr_result = json_decode((string) $response->getBody(), true);

Como usar o Laravel Passport para autenticação REST API

Esperamos que você entenda o uso do Laravel Passport para autenticação da API REST. Gostaríamos de ouvir sua opinião na seção de comentários abaixo. Também recomendamos ler o artigo Tutorial da API do Laravel: Como construir e testar uma API RESTful, que achamos útil para os leitores.

Fonte de gravação: artisansweb.net

Este site usa cookies para melhorar sua experiência. Presumiremos que você está ok com isso, mas você pode cancelar, se desejar. Aceitar Consulte Mais informação