2015-07-13 96 views
0

我們有一個公共API,我們希望使用OAuth2進行保護。OAuth2 in-browser-app use授權授予,而不是隱式的

我一直在閱讀規範/文檔,但我仍然有一些關於隱式授權的問題。

我知道隱式授權用於客戶端瀏覽器內(JavaScript)的應用程序。它不太安全,因此應該限制可能性(例如只讀訪問)。另外,不應該發佈刷新令牌,並且令牌不應該長壽。

但是,阻止瀏覽器內(js)-app的創建者使用Authz授予而不是隱式授予的是什麼?作爲這種應用程序的創建者,我可以獲得更多的權限(破壞性),並獲得一個刷新令牌,在過期時可以使用它來獲取新的access_tokens。後者是理想的,因爲我不會經常錯誤地讓用戶登錄。

這當然是有問題的,因爲refresh_token,client_id和client_secret很容易被這種方式損害。

所以這個問題本質上圍繞着這個: 我如何確保僅在瀏覽器中的應用程序將只使用受限制的隱式授權?

在使用OAuth連接到我們的api之前,客戶端/開發者必須註冊client_id,callback_url和client_secret。如果我檢測到這種行爲,我可能(作爲API所有者)撤消此權限。但這意味着我將不得不手動檢查一切,並定期?

有沒有更好的方法?

回答

0

一種選擇是依靠用戶代理頭作爲客戶端的Web應用程序不能影響它(它是瀏覽器發送請求!)

您可以考慮拒絕發出令牌,如果cliend_id和CLIENT_SECRETS是與來自瀏覽器的用戶代理結合使用。您可以將client_id與瀏覽器的用戶代理結合使用,但不要在此類情況下發出refresh_token並在access_token中使用較短的到期時間。 (不知道這是否仍然在技術上符合OIDC)

+0

謝謝,這似乎是一個很好的解決方案。將在這方面做一些額外的研究 – user3319803

0

我見過的OAuth2庫通常允許配置哪些訪問授權類型可用於給定的客戶端。這裏的解決方案是限制客戶端只使用隱式(並且不允許授權代碼)。

+0

在概念階段仍然在思考它,但很好的知道庫支持它。確實有必要爲每個客戶授予/撤銷這些授予類型(正在試圖在我的最後一段中說)。我正在尋找一些策略,儘可能減少人員參與。如果開發者使用authz-grant創建了一個桌面應用程序,我想要一些方法來檢測/阻止他在authz流程中使用相同的client_id,client_secret爲他的單獨的基於web的應用程序(在這種情況下,這將是一個安全漏洞) – user3319803