注意:我對這個問題有4個賞金,但是以下未提出答案的答案都不是這個問題所需的答案。所需的一切都在下面的Update 3中,只是在尋找Laravel代碼來實現。更新3:此流程圖正是我要完成的流程,下面的所有內容都是原始問題,其中包含一些較舊的更新。該流程圖總結了所需的一切。下面流程圖中的綠色部分是我知道該怎么做的部分。我正在尋找紅色部分及其旁注,以尋求使用Laravel代碼完成的幫助。在此處輸入圖片說明我已經做了很多研究,但是在將Laravel與JWT httponly cookie結合使用以用于自用API時,信息總是會很簡短,而且并不完整(大多數在線教程僅顯示JWT存儲在本地存儲中不是很安全) )??雌饋恚敯蚍掌靼l送的每個請求以驗證用戶身份時,應使用包含Passport JWT的httponly cookie來識別Javascript端的用戶。要了解如何使此設置有效的完整圖片,還需要一些其他事項,而在涉及該內容的單個教程中沒有涉及到:從JS端登錄后,Laravel Passport(不是tymon auth)將生成加密的JWT,并將其作為httponly cookie發送為響應。使用什么中間件?如果刷新令牌增加了安全性,該如何實施?調用auth端點的JavaScript(例如,axios)api偽代碼,httponly cookie如何傳遞到后端以及后端如何驗證令牌有效。如果一個帳戶是從多個設備登錄的,那么一個設備被盜了,如何撤消所有已認證用戶設備的訪問權限(假設用戶從他們可以控制的登錄設備上更改密碼)?登錄/注冊,注銷,更改密碼,忘記密碼控制器方法通??雌饋硐袷裁磥硖幚砹钆频膭摻?驗證/吊銷?CSRF令牌集成。我希望這個問題的答案可以為將來的讀者和那些目前正在努力尋找一個涵蓋上述要點的自學API的讀者提供一個易于遵循的指南。更新1:請注意,我CreateFreshApiToken之前曾嘗試過,但是在撤銷用戶令牌時(對于上述第3點和第4點),該方法不起作用。這是基于此評論的核心laravel開發商,談論時CreateFreshApiToken中間件:該中間件創建的JWT令牌不會存儲在任何地方。它們不能被撤銷或“不存在”。它們只是提供了一種通過laravel_token cookie對您的api調用進行身份驗證的方法。它與訪問令牌無關。另外:通常,您不會在發行同一個應用的客戶端上使用客戶端發行的令牌。您可以在第一方或第三方應用中使用它們。使用中間件或客戶端發行的令牌,但不能同時使用兩者。因此,似乎可以滿足第3點和第4點的要求,以撤銷令牌,如果使用CreateFreshApiToken中間件,則不可能這樣做。在客戶端,Authorization: Bearer <token>處理安全的httpOnly cookie 似乎不是走的路。我認為請求/響應應該包括安全的httpOnly cookie作為請求/響應標頭,例如基于laravel docs:使用這種身份驗證方法時,默認的Laravel JavaScript支架會指示Axios始終發送X-CSRF-TOKEN和X-Requested-With標頭。headerswindow.axios.defaults.headers.common = { 'X-Requested-With': 'XMLHttpRequest', 'X-CSRF-TOKEN': (csrf_token goes here)};這也是我尋求涵蓋以上所有要點的解決方案的原因。抱歉,我使用的是Laravel 5.6而不是5.5。更新2:密碼授予/刷新令牌授予組合似乎是必經之路。使用“ 密碼授予/刷新令牌授予”組合查找易于遵循的實施指南。密碼授予: 此授予適合與我們信任的客戶打交道,例如用于我們自己網站的移動應用程序。在這種情況下,客戶端會將用戶的登錄憑據發送到授權服務器,然后服務器直接頒發訪問令牌。刷新令牌授予: 當服務器發出訪問令牌時,它還會設置訪問令牌的到期時間。當我們想要在訪問令牌過期后刷新訪問令牌時,使用刷新令牌授予。在這種情況下,授權服務器將在發出訪問令牌的同時發送刷新令牌,該刷新令牌可用于請求新的訪問令牌。我正在尋找一種使用Password Grant / Refresh Token Grant組合的簡單,直接,全面的答案,該組合使用httpOnly安全cookie覆蓋上述原始5點的所有部分,創建/撤消/刷新令牌,創建登錄cookie,注銷cookie撤銷,控制器方法,CSRF等。
3 回答

慕碼人8056858
TA貢獻1803條經驗 獲得超6個贊
我還在我的項目中實施了Laravel護照,我想我已經涵蓋了您在問題中提到的大多數要點。
我已使用密碼授予來生成訪問令牌和刷新令牌。您可以按照以下步驟設置護照并實施護照授予。在登錄方法中,您必須驗證用戶憑據并生成令牌,然后將cookie(將cookie附加到響應)附加到響應。如果您需要,我可以舉一些例子。
我為CORS添加了兩個中間件(處理傳入的請求標頭),并檢查傳入的訪問令牌是否有效,如果無效,則從存儲的刷新令牌(刷新令牌)中生成訪問令牌。我可以舉個例子。
登錄后,來自客戶端的所有請求都應包含Authorization標頭(
Authorization: Bearer <token>
)。
讓我知道您是否清楚以上幾點。
- 3 回答
- 0 關注
- 996 瀏覽
添加回答
舉報
0/150
提交
取消