Kuinka käyttää Laravel Passportia REST API -todennukseen
Nykypäivän verkkokehityksessä sovellusliittymät tai verkkopalvelut ovat erittäin suosittuja. Kehittäessään mobiilisovellusta API: lla on yhteys sillan siirtämiseen dataan mobiilisovelluksen ja verkon välillä. API-puheluiden pitäminen turvallisina ja todennettuna on tärkeää sovellusten välillä siirrettävien tietojen suojaamiseksi.
Tässä artikkelissa tutkitaan Laravel Passportia, jonka avulla voimme todentaa sovellusliittymiä. Passport on rakennettu OAuth2-palvelimen päälle, mikä on paljon turvallisempi tapa rakentaa.
Käsitellessämme sovellusliittymiä käytimme pääsykoodin lähettämistä varmistaaksemme, että saapuva pyyntö on kelvollinen. Jos se on valtuutettu, vain sen tulisi sallia vuorovaikutus sovelluksen kanssa. Laravel-passi tarjoaa kätevän tavan luoda ja tarkistaa tunniste API-kutsua vastaan.
Asennus
Aloittamiseksi oletamme, että olet asentanut Laravelin järjestelmääsi. Asenna Passport suorittamalla seuraava komento terminaalissa.
composer require laravel/passport
Yllä oleva komento toimii Laravelin uusimman version kanssa. Jos käytät vanhempaa versiota, komento on hieman erilainen Laravel-versiostasi riippuen. Esimerkiksi, jos Laravel 5.5 on asennettu, komennosi tulisi olla:
composer require laravel/passport=~4.0
Tämä komento luo oman tietokannan siirtohakemiston. Nämä siirrot luovat taulukoita, jotka tallentavat asiakkaita ja käyttöoikeustunnuksia.
Rekisteröi config/app.php
tiedostossasi Passport-palveluntarjoaja palveluntarjoajien ryhmään.
config / app.php
'providers' =>[
....
LaravelPassportPassportServiceProvider::class,
],
Suoritetaan siirto, joka luo Passport-tietokantataulukot.
php artisan migrate
Jos siirryt nyt tietokantaasiakkaaseen, huomaat tietokantaan luodut uudet taulukot.
Suorita seuraavaksi alla oleva komento, joka luo salausavaimet suojattujen pääsykoodien luomiseksi. Alla oleva komento luo "henkilökohtaisen käyttöoikeuden" ja "salasanan myöntäminen" -asiakkaat, jotka ovat tallessa taulukkoon oauth_clients
.
php artisan passport:install
Käyttäjä voi kopioida nämä tunnukset seuraavia vaiheita varten. Oikeastaan aiomme nähdä kaksi tapaa luoda käyttöoikeustunnuksia. Yksi on tämän "salasanan myöntämisen" asiakkaiden kautta ja toinen kirjautumistodennuksessa.
Passin kokoonpano
Siirry Laravel-hakemistoihin ja avaa AppUser
mallitiedosto. Tähän tiedostoon meidän on lisättävä LaravelPassportHasApiTokens
piirre.
app / User.php.
<?php
namespace App;
use LaravelPassportHasApiTokens;
use IlluminateNotificationsNotifiable;
use IlluminateFoundationAuthUser as Authenticatable;
class User extends Authenticatable
{
use HasApiTokens, Notifiable;
....
}
Tämän jälkeen meidän on kutsuttava Passport::routes
metodi boot
menetelmässä 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();
}
}
Viimeinkin config/auth.php
määritä tiedostossa ‘api’ -todennusvalvojan ‘driver’ -vaihtoehdoksi ‘passport’ seuraavasti:
config / auth.php
'guards' => [
'web' => [
'driver' => 'session',
'provider' => 'users',
],
'api' => [
'driver' => 'passport',
'provider' => 'users',
],
],
Luo REST-sovellusliittymä ja suojaa se Laravel Passportilla
Laravel luo tiedoston, routes/api.php
johon meidän tulisi ilmoittaa REST-sovellusliittymien päätepiste. Voimme suojata sovellusliittymäämme lisäämällä siihen väliohjelmiston auth:api
.
reitit / api.php
Route::get('/api/categories', 'ApiController@categories')->middleware('auth:api');
Useita päätepisteitä varten meidän ei tarvitse lisätä väliohjelmistoa joka kerta. Sen sijaan voimme tehdä sen seuraavasti:
Route::group(['middleware' => 'auth:api'], function(){
Route::get('products', 'ApiController@products');
Route::get('categories', 'ApiController@categories');
});
Koska päätetapahtumamme ‘tuotteet’ on suojattu, jos kutsumme sitä suoraan ilman valtuutusmerkkiä, saamme ‘todentamattoman’ vastauksen.
Se tarkoittaa, että API-kutsun aikana on välttämätöntä välittää Valtuutus-tunnus jokaisessa pyynnössä. Joten Passport tarkistaa tunnuksen ja palauttaa vastauksen.
Luo käyttöoikeustunnus API: lle
On olemassa useita tapoja luoda käyttötunnus sovellukselle. Näemme 2 heistä tälle opetusohjelmalle.
Ensimmäinen vaihtoehto
Ensinnäkin joudut soittamaan / oauth / token vaadituilla parametreilla, ja saat tunnuksen vastauksena.
Oletamme, että käytät Guzzlen HTTP-kirjastoa API-pyynnön tekemiseen. Oletetaan, että sinulla on toinen projekti, josta teet API-pyynnön.
<?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);
Yllä oleva koodi palauttaa taulukon, joka sisältää avaimen ‘access_token’. Parametrit client_id ja client_secret saimme suoritettaessa passport:install
. Voit myös saada nämä tiedot tietokantataulukostasi ‘oauth_clients’.
Yritä jälleen postimieheltä siirtämällä access_token ‘tuotteet’ -päätteelle, ja meidän pitäisi saada vastaus.
Itse asiassa sinun on kutsuttava tätä sovellusliittymää kuten alla:
$response = $client->get('/products', [
'headers' => [
'Authorization' => 'Bearer '.$access_token,
]
]);
$arr_result = json_decode((string) $response->getBody(), true);
Toinen vaihtoehto
Ensimmäisessä vaihtoehdossa sinun on tiedettävä client_id ja client_secret tunnuksen luomiseksi. Tämä ei välttämättä ole sopiva tapa joissakin tilanteissa. Passport tarjoaa toisen vaihtoehdon luoda tunnuksen vain kirjautumistiedoilla.
Meidän ApiController.php
lisätä sisäänkirjautumismenettely post pyynnön ja kirjoittaa alla koodi sitä.
<?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);
}
}
Tämän API-puhelun soittamiseksi meidän on rekisteröitävä reitti sille.
reitit / api.php
Route::post('login', 'ApiController@login');
Käyttäjä voi tehdä HTTP-lähetyspyynnön tälle API: lle kirjoittamalla alla olevan koodin:
$response = $client->post('/api/login', [
'form_params' => [
'email' => '[email protected]',
'password' => 'my_password'
],
]);
$arr_result = json_decode((string) $response->getBody(), true);
Toivomme, että ymmärrät Laravel Passportin käytön REST API -todennuksessa. Haluamme kuulla ajatuksesi alla olevassa kommenttiosassa. Suosittelemme myös tutustumaan artikkeliin Laravel API Tutorial: How to build and Test RESTful API, jonka pidimme hyödyllisenä lukijoille.