簡體   English   中英

Oauth密碼授予和客戶端網站

[英]Oauth Password Grant and client website

我正在使用這些出色的工具,Laravel 5,thephpleague / oauth2-server,lucadegasperi / oauth2-server-laravel和AngularJS。

我同時具有域api.dev的api和授權服務器。

我有一個域為client.dev的客戶端網站。

客戶網站上有管理員和成員區域。

我正在使用OAuth 2資源所有者密碼授予類型來訪問api。

現在,我在客戶網站管理區域上有一個登錄表單。 用戶輸入他/她的用戶名和密碼並提交表格。 客戶端網站隨后使用密碼授予向auth服務器發出卷曲請求,將用戶名和密碼附加到客戶端id和密碼等。然后,它處理來自auth服務器的響應,並在成功后進行相應的重定向(管理員信息中心)(不是,請登錄並顯示錯誤消息)。

這很好。

我的問題是,在用戶獲得訪問令牌之前,客戶網站目前不知道用戶是誰(管理員或成員)。 當它向api請求資源時,才可以使用Authorizer :: getResourceOwnerId()之類的方法來檢查用戶是誰。

這是如上所述的場景。 成員可以登錄到管理區域,獲取訪問令牌並重定向到儀表板。 然后觸發一個有角的$ http.get,以獲取要顯示在儀表板上的資源(由oauth過濾)。 客戶端網站檢查並發現該用戶實際上不是管理員(通過Authorizer :: getResourceOwnerId()),因此注銷並將該用戶重定向回登錄表單。

首先,用戶不應該能夠成功登錄。

我的設置錯了嗎? 否則,我該如何正確處理?

我是否應該在客戶端和api / auth服務器上都具有相同的用戶表,以便我可以立即檢查在客戶端上登錄的用戶是否為admin。

感謝您抽出時間來閱讀。

我最終擴展了這兩個類和方法:

League \\ OAuth2 \\ Server \\ Grant \\ PasswordGrant :: completeFlow()-我已經包含要設置的user_id並傳遞給下面的Bearer類。

League \\ OAuth2 \\ Server \\ TokenType \\ Bearer :: generateResponse()-檢查user_id是否存在並將其包含在響應中。

當然,現在在lucadegasperi / oauth2-server-laravel的配置中使用了子類來代替其父類。

本質上,密碼授予現在返回此數據:

array (
  'access_token' => 'P9d4ChYm4UGMMqMuuhI250inNiD3NKlIM7cFuVB2',
  'token_type' => 'Bearer',
  'expires_in' => 10,
  'refresh_token' => 'G6WgBEWKakl9vc6jJesFGDUc1wlja8SwuOV7kg8y',
  'user_id' => 2,
)  

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM