2013-10-23 72 views
3

因此,在我開始之前,我是一位OAuth2新手,所以仍然試圖圍繞各種權限範圍和授權進行真正的包裝。沒有訪問令牌的OAuth2客戶端

我已成功使用Laravel OAuth2 Server軟件包成功實施OAuth2服務器。

我正在處理的當前網站將使用client_credentials授權類型從API中簡單地進行dogfood。我已經設法成功地運行,並可以使用提供的訪問令牌進行API調用。

但是,我想知道如何實現類似於Instagram,Soundcloud等的架構,他們不需要基本端點的access_token,只需要client_id。他們如何做到這一點?這是一種自定義授權類型嗎?

最好,我只想在訪問私人資源(如修改用戶信息等)時開始需要訪問令牌。據我所知,對於這些我需要使用password授予類型,這不是問題。

回答

2

您的服務器上有兩個不同的資源 - a)需要一些訪問檢查的資源b)可公開訪問的資源。

對需要訪問檢查的資源採取的操作應該要求用戶通過請求中的OAuth標頭進行標識。在Laravel的背景下 - 這將是一條路線,其中'before'鍵指定爲Oauth。

不需要訪問的操作可以通過構建您的路由來接受提供給用戶相關背景的參數,從而收集關於什麼用戶相關的上下文。比方說,你有一個用戶可以看到沒有任何訪問權限的配置文件。您的API的JSON表示端點可能是/ api/profile/[user_id],其中[user_id]是您希望看到的用戶配置文件的ID。對於這些不關心訪問的路線,您可以在路由聲明中過濾之前離開oauth。

+0

我明白,但並不完全符合我的要求。 Soundcloud,Instagram等確實需要一個'client_id'作爲他們基本端點的安全性,而''access_token'則需要安全端點。兩者都是安全形式,後者更強大。他們不僅僅把他們的基本終點開放,這正是我期望實現的目標。這將允許我的客戶端應用程序避免不斷請求訪問令牌,直到用戶真正登錄。不幸的是,您的建議會使API在基本級別上完全打開。 –

5

OAuth有一些流程,例如2-legged或3-legged,基本上告訴開發人員他需要向服務器提出多少請求才能獲得他想要的資源。

例如,在2條腿的流量發送你的ID和密碼(第一個請求),你回來了的access_token,並使用該令牌的請求,你可以爲你想要的資源的其他請求(第二個請求)。

回想一下你的Instagram示例,你可以認爲只使用client_id作爲單腿OAuth流程,因爲你只向服務器發出一個請求來獲取你想要的資源。

您可以將此類流量用於不太敏感的資源,例如個人資料照片或用戶的暱稱。

單支流的實現很簡單: - 如果user_id有效且應用程序不需要用戶批准來訪問請求的資源,請繼續並顯示資源。

因此實現一個單腿流程包括檢查client_id是否有效並檢查請求的資源是否需要用戶許可。也就是說,您可以使用單腿來請求用戶個人資料照片,但不能使用相同的流程來請求用戶的私人消息。

您可以在The OAuth Bible中閱讀更多關於每種OAuth流程的信息。

相關問題