{"id":24068,"date":"2021-05-11T13:18:00","date_gmt":"2021-05-11T10:18:00","guid":{"rendered":"https:\/\/themewp.inform.click\/?p=24068"},"modified":"2021-10-18T02:19:40","modified_gmt":"2021-10-17T23:19:40","slug":"comment-utiliser-laravel-passport-pour-l-authentification-api-rest","status":"publish","type":"post","link":"https:\/\/themewp.inform.click\/fr\/comment-utiliser-laravel-passport-pour-l-authentification-api-rest\/","title":{"rendered":"Comment utiliser Laravel Passport pour l&rsquo;authentification API REST"},"content":{"rendered":"<p>Dans le d\u00e9veloppement Web d&rsquo;aujourd&rsquo;hui, les API ou les services Web sont tr\u00e8s populaires. Lors du d\u00e9veloppement d&rsquo;une application mobile, l&rsquo;API joue un r\u00f4le de passerelle pour la transmission de donn\u00e9es entre l&rsquo;application mobile et le web. Il est important de garder les appels d&rsquo;API s\u00e9curis\u00e9s et authentifi\u00e9s pour prot\u00e9ger les donn\u00e9es transf\u00e9r\u00e9es d&rsquo;une application \u00e0 l&rsquo;autre.<\/p>\n<p>Dans cet article, nous \u00e9tudions le Laravel Passport qui nous permet d&rsquo;authentifier les API. Passport est construit sur le dessus du serveur OAuth2 qui est beaucoup plus s\u00e9curis\u00e9 dans la fa\u00e7on dont il est construit.<\/p>\n<p>Lors du traitement des API, nous envoyions un jeton d&rsquo;acc\u00e8s pour v\u00e9rifier si la demande entrante est valide. S&rsquo;il est autoris\u00e9, alors seulement il devrait permettre d&rsquo;interagir avec l&rsquo;application. Le passeport Laravel fournit un moyen pratique de cr\u00e9er et de v\u00e9rifier le jeton par rapport \u00e0 l&rsquo;appel d&rsquo;API.<\/p>\n<h3>Installation<\/h3>\n<p>Pour commencer, nous supposons que vous avez install\u00e9 Laravel sur votre syst\u00e8me. Pour installer le passeport, ex\u00e9cutez la commande ci-dessous dans le terminal.<\/p>\n<pre><code>composer require laravel\/passport<\/code><\/pre>\n<p>La commande ci-dessus fonctionnerait avec la derni\u00e8re version de Laravel. Si vous utilisez une ancienne version, la commande sera l\u00e9g\u00e8rement diff\u00e9rente en fonction de votre version de Laravel. Par exemple, si Laravel 5.5 est install\u00e9, votre commande devrait \u00eatre\u00a0:<\/p>\n<pre><code>composer require laravel\/passport=~4.0<\/code><\/pre>\n<p>Cette commande cr\u00e9e son propre r\u00e9pertoire de migrations de bases de donn\u00e9es. Ces migrations cr\u00e9eront des tables qui stockeront les clients et les jetons d&rsquo;acc\u00e8s.<\/p>\n<p>Dans votre <code>config\/app.php<\/code>fichier, enregistrez Passport service provider dans le tableau des fournisseurs.<\/p>\n<p>config\/app.php<\/p>\n<pre><code>'providers' =&gt;[\n\u00a0\u00a0....\n\u00a0\u00a0LaravelPassportPassportServiceProvider::class,\n],<\/code><\/pre>\n<p>Ex\u00e9cutons la migration qui cr\u00e9era les tables de base de donn\u00e9es pour Passport.<\/p>\n<pre><code>php artisan migrate<\/code><\/pre>\n<p>Maintenant, si vous allez dans votre client de base de donn\u00e9es, vous remarquerez les nouvelles tables cr\u00e9\u00e9es dans votre base de donn\u00e9es.<\/p>\n<p><a href=\"https:\/\/themewp.inform.click\/wp-content\/uploads\/2021\/04\/post-20656-608215f24e4c0.png\" data-rel=\"lightbox\" ><img decoding=\"async\" class=\"SDStudio-light-box-enable SDStudio-editor-tools-md-imp\" src=\"https:\/\/themewp.inform.click\/wp-content\/uploads\/2021\/04\/post-20656-608215f24e4c0.png\" alt=\"Comment utiliser Laravel Passport pour l&#039;authentification API REST\" ><\/a><\/p>\n<p>Ensuite, ex\u00e9cutez la commande ci-dessous qui cr\u00e9e des cl\u00e9s de chiffrement pour g\u00e9n\u00e9rer des jetons d&rsquo;acc\u00e8s s\u00e9curis\u00e9s. La commande ci-dessous cr\u00e9e des clients \u00ab\u00a0acc\u00e8s personnel\u00a0\u00bb et \u00ab\u00a0octroi de mot de passe\u00a0\u00bb qui sont stock\u00e9s dans la table <code>oauth_clients<\/code>.<\/p>\n<pre><code>php artisan passport:install<\/code><\/pre>\n<p><a href=\"https:\/\/themewp.inform.click\/wp-content\/uploads\/2021\/04\/post-20656-608215f2ddc78.png\" data-rel=\"lightbox\" ><img decoding=\"async\" class=\"SDStudio-light-box-enable SDStudio-editor-tools-md-imp\" src=\"https:\/\/themewp.inform.click\/wp-content\/uploads\/2021\/04\/post-20656-608215f2ddc78.png\" alt=\"Comment utiliser Laravel Passport pour l&#039;authentification API REST\" ><\/a><\/p>\n<p>L&rsquo;utilisateur peut copier ces jetons pour les \u00e9tapes suivantes. En fait, nous allons voir 2 fa\u00e7ons de cr\u00e9er des jetons d&rsquo;acc\u00e8s. L&rsquo;un est \u00e0 travers ces clients \u00ab\u00a0octroi de mot de passe\u00a0\u00bb et un autre est sur l&rsquo;authentification de connexion.<\/p>\n<h3>Configuration du passeport<\/h3>\n<p>Dirigez-vous vers les r\u00e9pertoires Laravel et ouvrez le <code>AppUser<\/code>fichier mod\u00e8le. Dans ce fichier, nous devons ajouter <code>LaravelPassportHasApiTokens<\/code>trait.<\/p>\n<p><strong>app\/Utilisateur.php<\/strong>.<\/p>\n<pre><code>&lt;?php\n\u00a0\nnamespace App;\n\u00a0\nuse LaravelPassportHasApiTokens;\nuse IlluminateNotificationsNotifiable;\nuse IlluminateFoundationAuthUser as Authenticatable;\n\u00a0\nclass User extends Authenticatable\n{\n\u00a0\u00a0\u00a0\u00a0use HasApiTokens, Notifiable;\n\u00a0\u00a0\u00a0\u00a0....\n}<\/code><\/pre>\n<p>Apr\u00e8s cela, nous devons appeler la <code>Passport::routes<\/code>m\u00e9thode dans la <code>boot<\/code>m\u00e9thode de <code>AuthServiceProvider<\/code>.<\/p>\n<p><strong>app\/Providers\/AuthServiceProvider.php<\/strong><\/p>\n<pre><code>&lt;?php\n\u00a0\nnamespace AppProviders;\n\u00a0\nuse LaravelPassportPassport;\nuse IlluminateSupportFacadesGate;\nuse IlluminateFoundationSupportProvidersAuthServiceProvider as ServiceProvider;\n\u00a0\nclass AuthServiceProvider extends ServiceProvider\n{\n\u00a0\u00a0\u00a0\u00a0\/**\n\u00a0\u00a0\u00a0\u00a0\u00a0* The policy mappings for the application.\n\u00a0\u00a0\u00a0\u00a0\u00a0*\n\u00a0\u00a0\u00a0\u00a0\u00a0* @var array\n\u00a0\u00a0\u00a0\u00a0\u00a0*\/\n\u00a0\u00a0\u00a0\u00a0protected $policies = [\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'AppModel' =&gt; 'AppPoliciesModelPolicy',\n\u00a0\u00a0\u00a0\u00a0];\n\u00a0\n\u00a0\u00a0\u00a0\u00a0\/**\n\u00a0\u00a0\u00a0\u00a0\u00a0* Register any authentication \/ authorization services.\n\u00a0\u00a0\u00a0\u00a0\u00a0*\n\u00a0\u00a0\u00a0\u00a0\u00a0* @return void\n\u00a0\u00a0\u00a0\u00a0\u00a0*\/\n\u00a0\u00a0\u00a0\u00a0public function boot()\n\u00a0\u00a0\u00a0\u00a0{\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$this-&gt;registerPolicies();\n\u00a0\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0Passport::routes();\n\u00a0\u00a0\u00a0\u00a0}\n}<\/code><\/pre>\n<p>Enfin, dans le <code>config\/auth.php<\/code>fichier, d\u00e9finissez l&rsquo;option &lsquo;driver&rsquo; de &lsquo;api&rsquo; authentication guard sur &lsquo;passport&rsquo; comme suit\u00a0:<\/p>\n<p><strong>config\/auth.php<\/strong><\/p>\n<pre><code>'guards' =&gt; [\n\u00a0\u00a0\u00a0\u00a0'web' =&gt; [\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'driver' =&gt; 'session',\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'provider' =&gt; 'users',\n\u00a0\u00a0\u00a0\u00a0],\n\u00a0\n\u00a0\u00a0\u00a0\u00a0'api' =&gt; [\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'driver' =&gt; 'passport',\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'provider' =&gt; 'users',\n\u00a0\u00a0\u00a0\u00a0],\n],<\/code><\/pre>\n<h3>Cr\u00e9ez une API REST et prot\u00e9gez-la avec Laravel Passport<\/h3>\n<p>Laravel cr\u00e9e un fichier dans <code>routes\/api.php<\/code>lequel nous devons d\u00e9clarer le point de terminaison de nos API REST. Nous pouvons prot\u00e9ger notre API en y ajoutant le middleware <code>auth:api<\/code>.<\/p>\n<p><strong>routes\/api.php<\/strong><\/p>\n<pre><code>Route::get('\/api\/categories', 'ApiController@categories')-&gt;middleware('auth:api');<\/code><\/pre>\n<p>Pour plusieurs points de terminaison, nous n&rsquo;avons pas besoin d&rsquo;ajouter un middleware \u00e0 chaque fois. Au lieu de cela, nous pouvons le faire comme suit :<\/p>\n<pre><code>Route::group(['middleware' =&gt; 'auth:api'], function(){\n\u00a0\u00a0\u00a0\u00a0Route::get('products', 'ApiController@products');\n\u00a0\u00a0\u00a0\u00a0Route::get('categories', 'ApiController@categories');\n});<\/code><\/pre>\n<p>Comme nos \u00ab\u00a0produits\u00a0\u00bb de point de terminaison sont prot\u00e9g\u00e9s si nous l&rsquo;appelons directement sans jeton d&rsquo;autorisation, nous obtenons une r\u00e9ponse \u00ab\u00a0non authentifi\u00e9\u00a0\u00bb.<\/p>\n<p><a href=\"https:\/\/themewp.inform.click\/wp-content\/uploads\/2021\/04\/post-20656-608215f2ddc78.png\" data-rel=\"lightbox\" ><img decoding=\"async\" class=\"SDStudio-light-box-enable SDStudio-editor-tools-md-imp\" src=\"https:\/\/themewp.inform.click\/wp-content\/uploads\/2021\/04\/post-20656-608215f2ddc78.png\" alt=\"Comment utiliser Laravel Passport pour l&#039;authentification API REST\" ><\/a><\/p>\n<p>Cela signifie que lors de l&rsquo;appel de l&rsquo;API, il est essentiel de transmettre le jeton d&rsquo;autorisation dans chaque demande. Ainsi, Passport v\u00e9rifiera le jeton et renverra la r\u00e9ponse.<\/p>\n<h3>G\u00e9n\u00e9rer un jeton d&rsquo;acc\u00e8s pour l&rsquo;API<\/h3>\n<p>Il existe plusieurs fa\u00e7ons de cr\u00e9er un jeton d&rsquo;acc\u00e8s pour l&rsquo;application. Nous en verrons 2 pour ce tutoriel.<\/p>\n<h4>Premi\u00e8re option<\/h4>\n<p>Dans un premier temps, vous devez appeler le \/oauth\/token avec les param\u00e8tres requis et vous obtiendrez le token en r\u00e9ponse.<\/p>\n<p>Nous supposons que vous utilisez une <a href=\"https:\/\/themewp.inform.click\/fr\/comment-utiliser-guzzle-un-client-http-php-pour-envoyer-des-requetes-http\/\" title=\"biblioth\u00e8que HTTP Guzzle\" >biblioth\u00e8que HTTP Guzzle<\/a> pour effectuer une requ\u00eate API. Disons que vous avez un autre projet \u00e0 partir duquel vous faites une demande d&rsquo;API.<\/p>\n<pre><code>&lt;?php\nrequire_once \"vendor\/autoload.php\";\n\u00a0\nuse GuzzleHttpClient;\n\u00a0\n$client = new Client([\n\u00a0\u00a0\u00a0\u00a0\/\/ Base URI is used with relative requests\n\u00a0\u00a0\u00a0\u00a0'base_uri' =&gt; 'http:\/\/laravel.dev',\n]);\n\u00a0\n$response = $client-&gt;post('\/oauth\/token', [\n\u00a0\u00a0\u00a0\u00a0'form_params' =&gt; [\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'grant_type' =&gt; 'password',\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'client_id' =&gt; '2',\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'client_secret' =&gt; '8qyKG7WKb3O3FZh2hUyEOZ3dAj5l9S5ljn2bdeJf',\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'username' =&gt; 'sajid@test.com',\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'password' =&gt; 'my_password',\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'scope' =&gt; '*',\n\u00a0\u00a0\u00a0\u00a0],\n]);\n\u00a0\n$arr_result = json_decode((string) $response-&gt;getBody(), true);<\/code><\/pre>\n<p>Le code ci-dessus renvoie un tableau qui contient une cl\u00e9 &lsquo;access_token&rsquo;. Les param\u00e8tres client_id et client_secret que nous avons obtenus lors de l&rsquo;ex\u00e9cution de <code>passport:install<\/code>. Vous pouvez \u00e9galement obtenir ces d\u00e9tails \u00e0 partir de votre table de base de donn\u00e9es &lsquo;oauth_clients&rsquo;.<\/p>\n<p>Essayez \u00e0 nouveau depuis le facteur en passant le access_token au point de terminaison \u00ab\u00a0produits\u00a0\u00bb et nous devrions obtenir la r\u00e9ponse.<\/p>\n<p><a href=\"https:\/\/themewp.inform.click\/wp-content\/uploads\/2021\/04\/post-20656-608215f2ddc78.png\" data-rel=\"lightbox\" ><img decoding=\"async\" class=\"SDStudio-light-box-enable SDStudio-editor-tools-md-imp\" src=\"https:\/\/themewp.inform.click\/wp-content\/uploads\/2021\/04\/post-20656-608215f2ddc78.png\" alt=\"Comment utiliser Laravel Passport pour l&#039;authentification API REST\" ><\/a><\/p>\n<p>En r\u00e9alit\u00e9, vous devez appeler cette API comme ci-dessous\u00a0:<\/p>\n<pre><code>$response = $client-&gt;get('\/products', [\n\u00a0\u00a0\u00a0\u00a0'headers' =&gt; [\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'Authorization' =&gt; 'Bearer '.$access_token,\n\u00a0\u00a0\u00a0\u00a0]\n]);\n\u00a0\n$arr_result = json_decode((string) $response-&gt;getBody(), true);<\/code><\/pre>\n<h4>Deuxi\u00e8me option<\/h4>\n<p>Dans la premi\u00e8re option, vous devez conna\u00eetre client_id et client_secret pour g\u00e9n\u00e9rer votre jeton. Cela peut ne pas \u00eatre un moyen pratique dans certains sc\u00e9narios. Passport fournit une autre option pour g\u00e9n\u00e9rer un jeton d&rsquo;acc\u00e8s via les informations de connexion uniquement.<\/p>\n<p>Dans notre <code>ApiController.php<\/code>ajoutez la m\u00e9thode de connexion avec la demande de publication et \u00e9crivez le code ci-dessous dedans.<\/p>\n<pre><code>&lt;?php\n\u00a0\nnamespace AppHttpControllers;\n\u00a0\nuse IlluminateHttpRequest;\nuse IlluminateSupportFacadesStorage;\nuse IlluminateSupportFacadesAuth;\n\u00a0\nclass ApiController extends Controller\n{\n\u00a0\u00a0\u00a0\u00a0public function login(){ \n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0if(Auth::attempt(['email' =&gt; request('email'), 'password' =&gt; request('password')])){ \n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$user = Auth::user(); \n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$success['token'] =\u00a0 $user-&gt;createToken('MyApp')-&gt; accessToken; \n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0return response()-&gt;json(['success' =&gt; $success], 200); \n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0} \n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0else{ \n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0return response()-&gt;json(['error'=&gt;'Unauthorised'], 401); \n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0} \n\u00a0\u00a0\u00a0\u00a0}<\/code><\/pre>\n<p>Pour effectuer cet appel d&rsquo;API, nous devons enregistrer une route pour celui-ci.<\/p>\n<p><strong>routes\/api.php<\/strong><\/p>\n<pre><code>Route::post('login', 'ApiController@login');<\/code><\/pre>\n<p>L&rsquo;utilisateur peut envoyer une requ\u00eate HTTP post \u00e0 cette API en \u00e9crivant le code ci-dessous\u00a0:<\/p>\n<pre><code>$response = $client-&gt;post('\/api\/login', [\n\u00a0\u00a0\u00a0\u00a0'form_params' =&gt; [\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'email' =&gt; 'sajid@test.com',\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'password' =&gt; 'my_password'\n\u00a0\u00a0\u00a0\u00a0],\n]);\n\u00a0\n$arr_result = json_decode((string) $response-&gt;getBody(), true);<\/code><\/pre>\n<p><a href=\"https:\/\/themewp.inform.click\/wp-content\/uploads\/2021\/04\/post-20656-608215f2ddc78.png\" data-rel=\"lightbox\" ><img decoding=\"async\" class=\"SDStudio-light-box-enable SDStudio-editor-tools-md-imp\" src=\"https:\/\/themewp.inform.click\/wp-content\/uploads\/2021\/04\/post-20656-608215f2ddc78.png\" alt=\"Comment utiliser Laravel Passport pour l&#039;authentification API REST\" ><\/a><\/p>\n<p>Nous esp\u00e9rons que vous comprenez l&rsquo;utilisation de Laravel Passport pour l&rsquo;authentification API REST. Nous aimerions entendre vos pens\u00e9es dans la section des commentaires ci-dessous. Nous vous recommandons \u00e9galement de parcourir l&rsquo;article <a href=\"https:\/\/www.toptal.com\/laravel\/restful-laravel-api-tutorial\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Laravel API Tutorial: How to Build and Test a RESTful API<\/a> que nous avons trouv\u00e9 utile pour les lecteurs.<\/p>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">Source d&rsquo;enregistrement:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/artisansweb.net\" class=\"external external_icon\">artisansweb.net<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Vous cherchez \u00e0 impl\u00e9menter Laravel Passport dans votre application ? Dans cet article, nous montrons comment installer Passport, le configurer et comment l&rsquo;utiliser.<\/p>\n","protected":false},"author":1,"featured_media":22200,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[497],"tags":[844],"class_list":["post-24068","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-laravel2-4","tag-affiai-fr"],"_links":{"self":[{"href":"https:\/\/themewp.inform.click\/fr\/wp-json\/wp\/v2\/posts\/24068","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/themewp.inform.click\/fr\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/themewp.inform.click\/fr\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/themewp.inform.click\/fr\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/themewp.inform.click\/fr\/wp-json\/wp\/v2\/comments?post=24068"}],"version-history":[{"count":0,"href":"https:\/\/themewp.inform.click\/fr\/wp-json\/wp\/v2\/posts\/24068\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/themewp.inform.click\/fr\/wp-json\/wp\/v2\/media\/22200"}],"wp:attachment":[{"href":"https:\/\/themewp.inform.click\/fr\/wp-json\/wp\/v2\/media?parent=24068"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/themewp.inform.click\/fr\/wp-json\/wp\/v2\/categories?post=24068"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/themewp.inform.click\/fr\/wp-json\/wp\/v2\/tags?post=24068"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}