2017-02-16 43 views
1

API消費者訂閱特定API門戶上的API。 他收到客戶端ID和clinet密碼。 訂閱有一個特定的quata集。OAuth2本地應用程序 - 客戶端祕密

[天天快樂情景]

  • 然後,他決定創建一個web應用程序,並在服務器上放置牢固的客戶端密鑰。
  • 然後他決定使用Auth代碼授予
  • 接收用戶auth_code後接到調用acces_token的請求將是具有客戶端密鑰的服務器到服務器請求。
  • 因此,目的是通過安全地存儲和使用client_secret來解決的。

[不快樂的一天場景]

  • 後來,他決定創建一個本地應用(公共客戶 - 的Android/IOS應用程序),使用他先前訂購相同的API。
  • 對於本機應用程序來訪問該API,它需要access_token。
  • 用戶根據身份服務器進行身份驗證並提供授權。
  • 接收auth_code並重定向迴應用程序。
  • 然後,該應用程序將需要此auth_code +客戶端ID + client_secret才能獲取access_token。
  • 但在這種情況下,client_secret未被安全地存儲。應用程序可以被反編譯,而client_secret可能會以API消費者購買/訂閱API的代價被濫用。

隱式流選項被排除。

可能的解決方法:

  • 創建其中的client_ID和client_secret存儲在代理和本機應用程序調用該代理AUTH_CODE從而獲得訪問令牌。
  • 加密client_secret 請提供更好的建議解決方案/型號的建議。

回答

0

我發現了一個更好的方法來解決這個問題,方法是爲本地可用的/ oauth2/authorize端點創建一個API。

因此,這裏的流量:

  1. 我的API將接受請求的用戶名,密碼和clientID的
  2. API將驗證接收到的clientID的對DB
  3. 如果有效,獲取了該client_secret來自DB的clientID
  4. 在運行時創建授權:基本base64(clientID:client_secret) - 使用腳本編輯器
  5. 將此創建的授權標頭添加到請求
  6. 提出這個請求,本地實際/的oauth2 /授權端點

這完美的作品通過公共客戶端(本地應用程序)不嵌入client_secret和適合我的情況下,我的經理API網關:)

注意:適用於auth_code授權流程

相關問題