2017-05-09 71 views
2

我研究了開發一個API消耗的應用程序中使用laravel,laravel護照,管腔和AngularJS如何使用Laravel護照驗證和管腔API

我有3個域如下

  • AUTH .dev - Laravel 5.4 +護照OAUTH服務器(作爲auth服務器)
  • api.dev - 流明(作爲API西弗)
  • app.dev - php + angularjs(單頁應用程序)

我無法正確配置這3個在一起。我已經設置auth.dev,它會成功生成令牌,我可以使用它們從app.dev

但我的要求是用3個獨立的實例API,驗證和APP

我試圖通過流明(驗證與auth.dev訪問令牌)來配置它,但它不能正常工作。

這是可能或有任何建議,以實現這一目標?

+0

我們需要關於什麼是「不工作」的信息。你看到了什麼錯誤/問題,你採取了哪些步驟來複制它? – samiles

+0

當我使用正確的授權信息和結構調用位於API(Lumen)的auth:api保護路由時,它將返回未經授權的錯誤。我想從auth服務器驗證這些路由(位於API)。 – Umanda

回答

1

我最近一直在研究與此相同的實現。它花了一點點努力纔能有效地工作,但它的工作!

基本上,如果您關心驗證您正在接收的令牌(您應該),您需要一種方法將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中提供的各種範圍中間件一起使用。

此時此處唯一的選擇是將這些中間件類(CheckScopesCheckForAnyScope)複製到Lumen應用程序中並手動加載它們。但是這很簡單,因爲它們很基本。

您可能需要對其進行修改,以便他們可以通過Authenticatable類(通常爲User模型)查看從您的OAuth端點返回的範圍。

這些解決方案都會給每個請求增加一些開銷,所以值得考慮在流明端緩存一段時間的結果。

如果你這樣做,確保它沒有被緩存很長一段時間,因爲它可以允許過期令牌仍然被認爲是有效的。

或者,將令牌的到期時間存儲在緩存中的某個位置,並根據請求時間驗證該令牌是否已過期。

希望這會有所幫助。