在Web應用程式開發中,常常需要使用OAuth2協定進行使用者驗證和授權,以便使用者可以安全地使用第三方服務。透過使用Laravel Passport,你可以方便地處理OAuth2協議,實現在Laravel應用程式中的身份驗證和授權。
Laravel Passport是一個開源軟體包,提供了一個完整的OAuth2伺服器實現,包括Token生成、Token管理、作用域等功能,使得OAuth2協議在Laravel應用程式中的實現變得非常容易。
本文將向你介紹如何使用Laravel Passport來管理OAuth2協定。
使用Laravel Passport產生API金鑰
在使用OAuth2協定之前,我們需要產生API金鑰。 API金鑰將作為OAuth2客戶端ID和金鑰使用,並用於取得存取權杖。我們可以使用Laravel Passport提供的artisan指令產生API金鑰。
首先,使用composer安裝Laravel Passport:
composer require laravel/passport
然後,執行遷移指令:
php artisan migrate
接下來,使用Passport的client:secret
指令產生API金鑰:
php artisan passport:client --password
這將產生一個客戶端ID和一個客戶端金鑰。
設定OAuth2服務
在產生API金鑰之後,我們需要設定OAuth2服務。 Laravel Passport提供了一些設定選項,可以透過修改Laravel應用程式的config/auth.php
檔案來設定這些選項。
在auth.php
檔案中,我們需要設定api
驅動程式為Passport驅動程序,這樣Laravel就會使用Passport來處理使用者驗證和授權。
'guards' => [ 'web' => [ 'driver' => 'session', 'provider' => 'users', ], 'api' => [ 'driver' => 'passport', 'provider' => 'users', 'hash' => false, ], ],
建立OAuth2路由
接下來,我們需要在應用程式中建立一些OAuth2路由,這些路由將用於處理OAuth2請求。我們可以使用Laravel Passport提供的自動產生路由的artisan指令來建立這些路由。
php artisan passport:routes
這將自動產生以下路由:
+-----------+------------------------+-------------------------------------------------+---------------------------------+------------------------------------------------------------------+------------------------+ | Method | URI | Name | Action | Middleware | In | +-----------+------------------------+-------------------------------------------------+---------------------------------+------------------------------------------------------------------+------------------------+ | GET|HEAD | oauth/authorize | passport.authorizations.authorize | LaravelPassportHttpControllersAuthorizationController@show | web,auth | LaravelPassportHttpMiddlewareCheckClientCredentials,can:view-authorizations | | POST | oauth/authorize | passport.authorizations.approve | LaravelPassportHttpControllersApproveAuthorizationController | web,auth | LaravelPassportHttpMiddlewareCheckClientCredentials,can:approve-authorizations | | DELETE | oauth/authorize | passport.authorizations.deny | LaravelPassportHttpControllersDenyAuthorizationController | web,auth | LaravelPassportHttpMiddlewareCheckClientCredentials,can:deny-authorizations | | POST | oauth/clients | passport.clients.store | LaravelPassportHttpControllersClientController@store | web,auth | LaravelPassportHttpMiddlewareCheckClientCredentials,can:create-clients | | GET|HEAD | oauth/clients | passport.clients.index | LaravelPassportHttpControllersClientController@forUser | web,auth | LaravelPassportHttpMiddlewareCheckClientCredentials,can:view-clients | | PUT | oauth/clients/{client} | passport.clients.update | LaravelPassportHttpControllersClientController@update | web,auth | LaravelPassportHttpMiddlewareCheckClientCredentials,can:update-clients | | DELETE | oauth/clients/{client} | passport.clients.destroy | LaravelPassportHttpControllersClientController@destroy | web,auth | LaravelPassportHttpMiddlewareCheckClientCredentials,can:delete-clients | | POST | oauth/token | passport.token | LaravelPassportHttpControllersAccessTokenController@issueToken| throttle | LaravelPassportHttpMiddlewareCheckClientCredentials,can:issue-tokens | | POST | oauth/token/refresh | passport.token.refresh | LaravelPassportHttpControllersTransientTokenController@refresh | throttle | LaravelPassportHttpMiddlewareCheckClientCredentials,can:refresh-tokens | | DELETE | oauth/tokens/{token} | passport.tokens.destroy | LaravelPassportHttpControllersAuthorizedAccessTokenController@destroy | web,auth | LaravelPassportHttpMiddlewareCheckClientCredentials,throttle:60,1,oauth | | GET|HEAD | oauth/tokens | passport.tokens.index | LaravelPassportHttpControllersAuthorizedAccessTokenController@forUser | web,auth | LaravelPassportHttpMiddlewareCheckClientCredentials,can:view-tokens | | DELETE | oauth/tokens | passport.tokens.destroy.all | LaravelPassportHttpControllersAuthorizedAccessTokenController@destroyAll| web,auth | LaravelPassportHttpMiddlewareCheckClientCredentials,can:delete-tokens | +-----------+------------------------+-------------------------------------------------+---------------------------------+------------------------------------------------------------------+------------------------+
這些路由都是Passport內建的路由,並使用passport.
前綴名稱。
定義OAuth2客戶端
現在我們已經準備好了,可以開始定義OAuth2客戶端了。我們可以使用先前產生的API金鑰來建立OAuth2客戶端。
在資料庫中建立一個新的OAuth2客戶端。我們可以手動建立它,或使用Laravel Passport提供的artisan指令passport:client
來建立它。
在建立過程中,我們需要指定客戶端的名稱、金鑰、回呼URL等。
手動建立:
INSERT INTO `oauth_clients` (`id`, `user_id`, `name`, `secret`, `redirect`, `revoked`, `personal_access_client`, `password_client`, `updated_at`, `created_at`) VALUES (1, NULL, 'My Client', 'my-client-secret', 'http://localhost/callback', 0, 0, 1, '2021-10-01 00:00:00', '2021-10-01 00:00:00');
用artisan建立:
php artisan passport:client --client --name="My Client"
執行此指令後,它將自動產生OAuth2客戶端,並顯示客戶端ID和金鑰。
產生OAuth2存取令牌
現在我們已經準備好了OAuth2客戶端,並定義了OAuth2路由,我們可以開始使用OAuth2協定來產生存取權杖。
我們可以使用passport:client
命令來產生存取權杖:
php artisan passport:client --client --password
執行此命令後,它將產生一個OAuth2客戶端並自動為該客戶端生成一個訪問令牌。
使用OAuth2存取令牌進行API呼叫
最後一步是使用OAuth2存取令牌進行API呼叫。我們可以使用Laravel自帶的Guzzle
來發送HTTP請求,並將存取權杖作為Authorization Header發送。
use GuzzleHttpClient; $client = new Client(); $response = $client->request('GET', 'http://localhost/api/user', [ 'headers' => [ 'Authorization' => 'Bearer '.$accessToken, ], ]); $body = $response->getBody()->getContents();
要注意的是,對於每個請求,我們都需要發送有效的存取權杖。這可以透過使用Passport::actingAs
方法來實現,該方法將指定的使用者ID替換為有效的授權令牌。
use LaravelPassportPassport; Passport::actingAs($user); $response = $client->request('GET', 'http://localhost/api/user', [ 'headers' => [ 'Authorization' => 'Bearer '.$accessToken, ], ]);
結論
在本文中,我們介紹如何使用Laravel Passport來管理OAuth2協定。使用Laravel Passport可以輕鬆產生API金鑰、設定OAuth2服務、建立OAuth2路由、定義OAuth2用戶端、產生OAuth2存取權杖以及使用它們來進行API呼叫。在開發網頁應用程式時使用OAuth2協議,Laravel Passport是一個非常好的選擇。
以上是Laravel開發:如何使用Laravel Passport管理OAuth2?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本篇文章给大家带来了关于laravel的相关知识,其中主要介绍了关于单点登录的相关问题,单点登录是指在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统,下面一起来看一下,希望对大家有帮助。

本篇文章给大家带来了关于laravel的相关知识,其中主要介绍了关于Laravel的生命周期相关问题,Laravel 的生命周期从public\index.php开始,从public\index.php结束,希望对大家有帮助。

在laravel中,guard是一个用于用户认证的插件;guard的作用就是处理认证判断每一个请求,从数据库中读取数据和用户输入的对比,调用是否登录过或者允许通过的,并且Guard能非常灵活的构建一套自己的认证体系。

laravel中asset()方法的用法:1、用于引入静态文件,语法为“src="{{asset(‘需要引入的文件路径’)}}"”;2、用于给当前请求的scheme前端资源生成一个url,语法为“$url = asset('前端资源')”。

本篇文章给大家带来了关于laravel的相关知识,其中主要介绍了关于使用中间件记录用户请求日志的相关问题,包括了创建中间件、注册中间件、记录用户访问等等内容,下面一起来看一下,希望对大家有帮助。

本篇文章给大家带来了关于laravel的相关知识,其中主要介绍了关于中间件的相关问题,包括了什么是中间件、自定义中间件等等,中间件为过滤进入应用的 HTTP 请求提供了一套便利的机制,下面一起来看一下,希望对大家有帮助。

在laravel中,fill方法是一个给Eloquent实例赋值属性的方法,该方法可以理解为用于过滤前端传输过来的与模型中对应的多余字段;当调用该方法时,会先去检测当前Model的状态,根据fillable数组的设置,Model会处于不同的状态。

laravel路由文件在“routes”目录里。Laravel中所有的路由文件定义在routes目录下,它里面的内容会自动被框架加载;该目录下默认有四个路由文件用于给不同的入口使用:web.php、api.php、console.php等。


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

SublimeText3 Linux新版
SublimeText3 Linux最新版

EditPlus 中文破解版
體積小,語法高亮,不支援程式碼提示功能

SublimeText3漢化版
中文版,非常好用

記事本++7.3.1
好用且免費的程式碼編輯器

Dreamweaver Mac版
視覺化網頁開發工具