API令牌認證
介紹
在本文中,我將使用圖表以易於理解的方式解釋 API 令牌身份驗證。
在粗略了解 API 令牌身份驗證的工作原理後,我將透過基於程式碼的方式解釋 API 令牌身份驗證如何使用 Laravel Sanctum 進行工作。
透過閱讀本文,您將了解以下內容
- API 令牌驗證如何運作
- 如何安裝 Laravel Sanctum
- 在使用者註冊和登入時產生 API 令牌
- API 令牌驗證以限制存取並驗證資源所有權
- 登出時刪除 API 令牌
API 令牌身份驗證的工作原理
1.使用者註冊/登入要求
用戶端將使用者的登入資訊(例如電子郵件、密碼)傳送到驗證伺服器。
2.使用者認證
認證伺服器驗證登入訊息,檢查使用者是否存在、密碼是否正確。
3. API 令牌產生
成功登入後,Auth 伺服器會為使用者產生一個 API 令牌。產生的API令牌儲存在personal_access_tokens表中。
4. API 請求
客戶端向資源伺服器發送 API 請求,並將產生的 API 令牌附加到授權標頭。
5. API 令牌驗證
資源伺服器驗證API令牌。如果 API 令牌有效,則處理請求。
6. API 回應
資源伺服器回傳API回應。
如何安裝 Laravel Sanctum
此指令產生Laravel專案下API token認證所需的api.php檔案和遷移檔案。
然後,執行遷移:
這將建立 individual_access_tokens 表。
在使用者註冊和登入時產生 API 令牌
範例程式碼
api.php
AuthController.php
用戶註冊
- 用戶註冊。
- 新使用者保存在使用者表中。
- 產生 API 令牌。 (創建令牌)
- 產生的API token和使用者資訊儲存在personal_access_tokens表中,並向使用者提供API token。
範例程式碼
api.php
AuthController.php
使用者登入
- 使用者登入。
- 驗證使用者是否存在於使用者表中。
- API token是登入成功後產生的。 (創建令牌)
- 產生的API token和使用者資訊儲存在personal_access_tokens表中,並向使用者提供API token。
*注意:每次使用者登入時都會產生一個新的 API 令牌。
API 令牌生成
使用 Postman,發送具有以下條件的 API 請求以檢查回應。
成功登入後,會產生 API 令牌。
您可以檢查personal_access_tokens表來確認登入使用者的名稱和API令牌是否已儲存。
*注意:API回應中的令牌與personal_access_tokens表中的令牌不同,因為它在儲存到資料庫時經過雜湊處理。
API令牌認證
- 使用者傳送 API 請求並在授權標頭中包含 API 令牌。
- auth:sanctum 中間件將從 API 請求接收到的 API 令牌與儲存在 individual_access_tokens 表中的 API 令牌進行比對。
- 如果 API 令牌成功通過驗證,資源伺服器將處理 API 請求。
- 經過驗證的使用者可以更新或刪除貼文。
- 資源伺服器回傳API回應。
限制對帖子功能的訪問
以下是與使用者關聯的貼文的 CRUD 流程的範例程式碼。
範例程式碼:PostController.php
使用 Laravel Sanctum 限制存取權限,以便只有登入的使用者才能建立、編輯和刪除與使用者關聯的貼文。
傳送實際的 API 請求以驗證 API 令牌驗證是否正確執行。
存取控制標準
使用者API
- 索引,顯示 這些操作提供一般公共訊息,不需要 API 令牌身份驗證,以獲得更好的使用者體驗和 SEO。
- 儲存、更新、刪除 為了防止未經授權的存取並保持資料完整性,需要 API 令牌身份驗證。
管理API
- 索引、顯示、儲存、更新、刪除 為了增強安全性,應該透過要求所有控制器操作進行使用者驗證來保護不需要公開的 API。
編碼
也可以透過在路由檔案中寫入以下內容來限制對 apiResource 中設定的貼文的所有端點的存取。
api.php
在這種情況下,我們只想為 PostController 中的儲存、更新和刪除操作設定 API 令牌身份驗證。為此,請在 PostController 中建立一個建構函式方法,並將 auth:sanctum 中間件應用於 index 和 show 以外的所有操作。
PostController.php
現在,使用者在建立、更新或刪除貼文時必須在請求中包含令牌。
測試此設置,如果您發送沒有授權令牌的請求來創建帖子,則會返回帶有「未經身份驗證」訊息的 401 錯誤,並且帖子創建失敗。
如果包含授權令牌,則資料建立成功。
同樣,更新和刪除帖子的 API 要求發送請求時在 Authorization header 中包含 Token。
所有權驗證後
使用者存取限制已透過 API 令牌驗證實作。
不過,還是有問題。
在目前狀態下,經過驗證的使用者可以更新或刪除其他使用者的貼文。
新增一個流程來驗證使用者是否擁有貼文的所有權。
- 使用者傳送 API 請求並在授權標頭中包含 API 令牌。
- auth:sanctum 中間件將從 API 請求接收到的 API 令牌與儲存在 individual_access_tokens 表中的 API 令牌進行比對。
- auth:sanctum 中間件取得與 API 令牌關聯的使用者並檢查該使用者是否擁有目標貼文的所有權。
- 如果 API 令牌成功驗證且使用者擁有目標貼文的所有權,資源伺服器將處理 API 請求。
- 擁有貼文所有權的經過驗證的使用者可以更新和刪除貼文。
- 資源伺服器回傳API回應。
編碼
在 Laravel 策略檔案中編寫授權邏輯,以便只有擁有貼文所有權的使用者才能更新和刪除貼文。
PostController.php
- 收到請求
- 使用者發送 API 請求並在授權標頭中包含 API 令牌。
- 令牌驗證
- 資源伺服器從 API 請求的 Authorization 標頭中取得 API 令牌。 然後驗證從請求接收到的 API 令牌是否與儲存在 individual_access_tokens 表中的 API 令牌相符。
- 使用者辨識
- 如果令牌有效,則識別與令牌關聯的使用者。 我們可以透過 $request->user() 方法來取得已識別的使用者。
- 呼叫策略 Gate::authorize 方法將經過驗證的使用者和資源物件作為參數傳遞給策略的方法。
PostPolicy.php
修改方法:
- 參數:
- $user:目前經過驗證的使用者的實例。
- $post:Post 模型的實例。
- 邏輯:
- 檢查目前認證使用者是否擁有指定貼文的所有權。
更新其他用戶的帖子
- 將貼文 ID 設定為貼文更新 API 端點的路徑參數。
- 在授權標頭中包含不擁有此貼文的使用者的令牌。
- 傳回 403 錯誤訊息,表示您不是貼文的擁有者。
登出時刪除 API 令牌
註銷流程
- 使用者發送 API 請求並在授權標頭中包含 API 令牌
- auth:sanctum 中間件將從 API 請求接收到的 API 令牌與儲存在 individual_access_tokens 表中的 API 令牌進行比對。
- 如果 API 令牌成功通過驗證,資源伺服器將處理 API 請求。
- 從personal_access_tokens表中刪除經過驗證的使用者的API令牌。
- 資源伺服器回傳API回應。
編碼
api.php
套用 auth::sanctum 中介軟體進行註銷路由並設定 API Token 驗證。
AuthController.php
伺服器將從資料庫中刪除目前的 API 令牌。這會使令牌無效並且無法再次使用。
伺服器向客戶端回傳回應,表示註銷成功。
概括
在本文中,使用圖表以易於理解的方式解釋了 API 令牌身份驗證。
透過利用 Laravel Sanctum,可以使用 API 令牌實現簡單且安全的身份驗證,這允許客戶端以不同於基於會話的身份驗證的靈活性向單一使用者授予存取權限。使用中間件和策略,還可以有效保護 API 請求、限制存取以及驗證資源所有權。
以上是API令牌認證的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

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

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

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

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

熱門文章

熱工具

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

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

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

JWT是一種基於JSON的開放標準,用於在各方之間安全地傳輸信息,主要用於身份驗證和信息交換。 1.JWT由Header、Payload和Signature三部分組成。 2.JWT的工作原理包括生成JWT、驗證JWT和解析Payload三個步驟。 3.在PHP中使用JWT進行身份驗證時,可以生成和驗證JWT,並在高級用法中包含用戶角色和權限信息。 4.常見錯誤包括簽名驗證失敗、令牌過期和Payload過大,調試技巧包括使用調試工具和日誌記錄。 5.性能優化和最佳實踐包括使用合適的簽名算法、合理設置有效期、

會話劫持可以通過以下步驟實現:1.獲取會話ID,2.使用會話ID,3.保持會話活躍。在PHP中防範會話劫持的方法包括:1.使用session_regenerate_id()函數重新生成會話ID,2.通過數據庫存儲會話數據,3.確保所有會話數據通過HTTPS傳輸。

PHP8.1中的枚舉功能通過定義命名常量增強了代碼的清晰度和類型安全性。 1)枚舉可以是整數、字符串或對象,提高了代碼可讀性和類型安全性。 2)枚舉基於類,支持面向對象特性,如遍歷和反射。 3)枚舉可用於比較和賦值,確保類型安全。 4)枚舉支持添加方法,實現複雜邏輯。 5)嚴格類型檢查和錯誤處理可避免常見錯誤。 6)枚舉減少魔法值,提升可維護性,但需注意性能優化。

SOLID原則在PHP開發中的應用包括:1.單一職責原則(SRP):每個類只負責一個功能。 2.開閉原則(OCP):通過擴展而非修改實現變化。 3.里氏替換原則(LSP):子類可替換基類而不影響程序正確性。 4.接口隔離原則(ISP):使用細粒度接口避免依賴不使用的方法。 5.依賴倒置原則(DIP):高低層次模塊都依賴於抽象,通過依賴注入實現。

在PHPStorm中如何進行CLI模式的調試?在使用PHPStorm進行開發時,有時我們需要在命令行界面(CLI)模式下調試PHP�...

使用PHP的cURL庫發送JSON數據在PHP開發中,經常需要與外部API進行交互,其中一種常見的方式是使用cURL庫發送POST�...

靜態綁定(static::)在PHP中實現晚期靜態綁定(LSB),允許在靜態上下文中引用調用類而非定義類。 1)解析過程在運行時進行,2)在繼承關係中向上查找調用類,3)可能帶來性能開銷。
