時保持客戶端憑據保密我們正在構建休息服務,並且我們希望使用OAuth 2進行授權。 current draft(5月19日的v2-16)描述了four grant types。它們是獲得授權的機制或流程(訪問令牌)。如何在使用OAuth2的資源所有者密碼憑證授予類型
- 授權碼
- 隱格蘭特
- 資源所有者憑證
- 客戶端憑證
看來,我們需要支持他們四個,因爲他們的目的不同。前兩個(也可能是最後一個)可用於需要訪問該API的第三方應用程序。授權代碼是授權足以幸運地駐留在安全服務器上的Web應用程序的標準方式,而隱式授權流程則是客戶端應用程序的選擇,它不能完全保留其憑據的機密性(例如,移動/桌面應用程序,JavaScript客戶端等)。
我們希望自己使用第三種機制,以在移動設備上提供更好的用戶體驗 - 而不是讓用戶訪問Web瀏覽器中的登錄對話框等,用戶只需直接輸入他或她的用戶名和密碼即可應用程序和登錄。 我們還希望使用客戶端憑證授予類型來獲取可用於查看公共數據的訪問令牌,而不與任何用戶關聯。在這種情況下,這不是什麼授權,而是類似於API密鑰的東西,我們只使用該密鑰來訪問已向我們註冊的應用程序,如果需要,我們可以選擇撤銷訪問。
所以我的問題是:
- 你覺得我已經明白正確的不同類型的補助金的目的是什麼?
- 如何保持您的客戶端憑據保密?在第三種情況和第四種情況下,我們都需要客戶端上的客戶端ID和客戶端密碼,這聽起來不是一個好主意。
- 即使您使用隱式授權類型並且不公開您的客戶端密鑰,是什麼阻止另一個應用程序使用相同的授權機制和客戶端ID來模擬您的應用程序?
總而言之,我們希望能夠使用來自客戶端應用程序的客戶端憑證和資源所有者憑據流。這兩種流程都需要您以某種方式存儲客戶端密鑰,但客戶端是移動設備或JavaScript應用程序,因此很容易被盜取。
我已經做了更多的研究,我認爲你是對的 - 沒有辦法在客戶端保持任何祕密。看起來,正如您所建議的那樣,我們保護API免遭濫用的最佳選擇是實施某種使用情況監控。感謝您的回答! – 2011-06-06 08:48:04
如果您將來遇到任何更好的解決方案,請告訴我! – heavi5ide 2011-06-06 16:00:23
只是爲了解,下面的說法正確嗎? *當您使用經過身份驗證的Web會話(通過cookie等)並在服務器上以「舊方式」進行身份驗證時,使用OAuth2的資源所有者密碼憑證授予類型時沒有更多的安全性,因爲經典的Web會話/ cookie可能會傳遞給其他演員/可能被盜。 – spaudanjo 2014-08-29 07:59:58