搜尋
首頁php框架LaravelLaravel開發:如何使用Laravel Passport管理OAuth2?

在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中文網其他相關文章!

陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
將JavaScript框架(React,Vue,Angular)與Laravel Backend集成將JavaScript框架(React,Vue,Angular)與Laravel Backend集成May 03, 2025 am 12:20 AM

React,vue,andangularCanBeintegratedWithLaravelByFollowingSpecificetUpSteps.1)forreact:installReactusingLaravelui,setUpComponentsInapp.js.js.js.js.2)forvue:uselaravel'sbuilt'sbuilt'sbuilt invuesupport,configureinapp.js.3)forangular forangular setuplare setulare sereptery sereptry and parkuly sereftery secparroughtery secparroughtery secparroughtery

任務管理工具:遠程項目的優先級和跟踪進度任務管理工具:遠程項目的優先級和跟踪進度May 02, 2025 am 12:25 AM

taskManagementsToolSareEssentialForefectiverMototeprojectManagementbyPrioritizingTaskSandTrackingProgress.1)USETOOLSLIKETRELLOANDASANATASANATOSETPRIORITIONTAGS.2)

最新的Laravel版本如何提高性能?最新的Laravel版本如何提高性能?May 02, 2025 am 12:24 AM

Laravel10enhancesPerformancEthroughSeveralKeyKeyFeatures.1)itintroducesquereBuilderCachingTordorcachingTordOuctedSataBaseload.2)itoptimiesseloizeseloquentmodelloAdingwithlazyproxies.3)

全棧Laravel應用程序的部署策略全棧Laravel應用程序的部署策略May 02, 2025 am 12:22 AM

最佳的全棧Laravel應用部署策略包括:1.零停機部署,2.藍綠部署,3.持續部署,4.金絲雀發布。 1.零停機部署使用Envoy或Deployer自動化部署過程,確保應用在更新時保持可用。 2.藍綠部署通過維護兩個環境實現無停機部署,並允許快速回滾。 3.持續部署通過GitHubActions或GitLabCI/CD自動化整個部署流程。 4.金絲雀發布通過Nginx配置,將新版本逐步推廣給用戶,確保性能優化和快速回滾。

擴展全堆棧Laravel應用程序:最佳實踐和技術擴展全堆棧Laravel應用程序:最佳實踐和技術May 02, 2025 am 12:22 AM

toscalealaravelApplication有效,焦點databaseSharding,緩存,負載平衡和microservices.1)實現DataBasEshardingTodistaCripedataCrossmultipledataBasesForimProvesforimPrevperformance.2)uselaravel'scachingsystemystemystemystemywithredsormememememememcachedtebachedtebab

沉默的鬥爭:克服分佈式團隊中的溝通障礙沉默的鬥爭:克服分佈式團隊中的溝通障礙May 02, 2025 am 12:20 AM

doovercomecommunicationbarriersIndistributedTeams,使用:1)VideoCallSforface-to-Faceinteraction,2)setClearresponsEtimepections,3)chooseappropropropraproproprapropropriatecommunicationTools,4)CreatseateAteAteAteamCommunicationGuide和5)建立PemersonalBoundariestAriestOpeopReventBreventBurniationBurnication.the

使用Laravel Blade在全棧項目中進行前端模板使用Laravel Blade在全棧項目中進行前端模板May 01, 2025 am 12:24 AM

laravelbladeenhancesfrontendtemplatinginflatinginflationll-stackprojectsbyferingCleanSyntaxandaxandpoperfelfulfeatures.1)itallowsforeasyvariableasyvariabledisplayandControlstructures.2)bladesuportsuportsuportscreatingingingingingingingingingingangingandredreingscomponents components components components,aidinginmanagingcomplexuis.3)

使用Laravel:實用教程構建全堆棧應用程序使用Laravel:實用教程構建全堆棧應用程序May 01, 2025 am 12:23 AM

laravelisidealforll-stackapplicationsduetoitselegantsyntax,complastissionecosystem和perperatedfulfeatures.1)useeloquentormforintuivelbackenddatamanipulation,butavoidn 1queryissues.2)

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

Dreamweaver Mac版

Dreamweaver Mac版

視覺化網頁開發工具

MinGW - Minimalist GNU for Windows

MinGW - Minimalist GNU for Windows

這個專案正在遷移到osdn.net/projects/mingw的過程中,你可以繼續在那裡關注我們。 MinGW:GNU編譯器集合(GCC)的本機Windows移植版本,可自由分發的導入函式庫和用於建置本機Windows應用程式的頭檔;包括對MSVC執行時間的擴展,以支援C99功能。 MinGW的所有軟體都可以在64位元Windows平台上運作。

PhpStorm Mac 版本

PhpStorm Mac 版本

最新(2018.2.1 )專業的PHP整合開發工具

SublimeText3 英文版

SublimeText3 英文版

推薦:為Win版本,支援程式碼提示!

SAP NetWeaver Server Adapter for Eclipse

SAP NetWeaver Server Adapter for Eclipse

將Eclipse與SAP NetWeaver應用伺服器整合。