![](/img/trans.png)
[英]Lumen of Laravel & OAuth2 - grant type: Client Credentials working but how to use Username/Password Approach correctly
[英]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.