2
我知道這個問題已經被問了很多次,形式和形式各不相同,但我對於一些事情還是很不清楚。令人困惑的是,圍繞Web的這個主題的資源如何引用沒有明確上下文的「用戶」。 API密鑰是爲用戶頒發的,訪問令牌也是如此,但我不認爲API密鑰用戶與訪問令牌用戶相同。如何有效使用API密鑰和令牌方案來保護REST API?
- 您是否需要針對最終用戶客戶端的不同實例擁有不同的API密鑰?例如,如果我爲第三方API構建移動應用程序,每個實例是否保留其自己的API密鑰?我不認爲他們這樣做,但我怎麼綁定API密鑰,並將令牌一起訪問,以表示某個請求來自某個已知用戶授權的應用程序的特定實例?如果我是auth提供者,我是否必須跟蹤每一個?
- API密鑰和訪問令牌通常由一對公共密鑰和共享密鑰表示。作爲服務提供者(服務器端),我使用哪一個來驗證我收到的消息,API密鑰或訪問令牌?如果我理解正確,這個想法是每個請求應該帶有從API密鑰的祕密部分派生的簽名,以便服務器可以檢查它是否來自可信客戶端。現在我有什麼使用訪問令牌的祕密?我知道訪問令牌用於驗證系統用戶是否已授權應用程序代表他們執行操作,但是訪問令牌的哪些部分會對訪問令牌密碼有用?
- 是從一個(安全)隨機數生成的一個散列,和一個時間戳salt是一個很好的API密鑰生成策略?
- 是否有(最好是開源的,基於Java的)框架能夠完成其中的大部分工作?
那麼這是否意味着任何需要用戶認證的資源,簽名都應該使用訪問令牌的祕密進行簽名?令牌(這對密鑰)是否代表用戶授予應用程序的授權?如果應用程序具有不同的實例(例如,在不同的Android設備上有相同的應用程序),是否意味着所有應用程序都會自動授權?嗯...除了那些其他實例不知道這個祕密,除非它保存在他們都使用的中央後端。 – 2014-09-11 07:31:02
對於前兩個問題,假設你在談論Oauth 1。但請記住,沒有理由不允許爲單個應用程序設置多個憑據。這取決於服務提供商的設計。 – 2014-09-11 08:24:20