我最近一直在研究與此相同的實現。它花了一點點努力纔能有效地工作,但它的工作!
基本上,如果您關心驗證您正在接收的令牌(您應該),您需要一種方法將Lumen從客戶端應用程序接收的令牌轉發到您的OAuth服務,並將該驗證的一些詳細信息返回給你的Lumen應用程序。
如果你知道你的Lumen API服務總是要在同一臺機器上運行,那麼你可以使用某種RPC來保存不必要的HTTP - 我在OAuth中通過一個自定義的Artisan命令使用命令行界面服務和自定義腳本從流明端運行它,我稱之爲RemoteArtisan。
另一種方法是通過HTTP,基本上使得您的OAuth服務提供了自己非常基本的API端點。像這樣的事情在routes/api.php
應該做的:
Route::middleware('client')->get('user', function (Request $request) {
$helper = new App\FirstPartyClientHelper;
return response()->json($helper->getTokenOwnerDetails($request->bearerToken()));
});
我FirstPartyClientHelper
是一個簡單的類,它分析令牌來獲取ID了出來,並用它來獲取從OAuth的DB,我要發送回資源流明。您可能不需要在這裏進行大量查詢或發送大量數據,這可能只是簡單的通過/失敗。取決於你的需求。
我會推薦一件事,然後發回給你的Lumen應用程序,但是這是什麼範圍被分配給令牌。您可能希望將這些與Passport中提供的各種範圍中間件一起使用。
此時此處唯一的選擇是將這些中間件類(CheckScopes
和CheckForAnyScope
)複製到Lumen應用程序中並手動加載它們。但是這很簡單,因爲它們很基本。
您可能需要對其進行修改,以便他們可以通過Authenticatable
類(通常爲User
模型)查看從您的OAuth端點返回的範圍。
這些解決方案都會給每個請求增加一些開銷,所以值得考慮在流明端緩存一段時間的結果。
如果你這樣做,確保它沒有被緩存很長一段時間,因爲它可以允許過期令牌仍然被認爲是有效的。
或者,將令牌的到期時間存儲在緩存中的某個位置,並根據請求時間驗證該令牌是否已過期。
希望這會有所幫助。
我們需要關於什麼是「不工作」的信息。你看到了什麼錯誤/問題,你採取了哪些步驟來複制它? – samiles
當我使用正確的授權信息和結構調用位於API(Lumen)的auth:api保護路由時,它將返回未經授權的錯誤。我想從auth服務器驗證這些路由(位於API)。 – Umanda