簡體   English   中英

保護HTTP API-不提示用戶輸入密碼,並避免公開私鑰

[英]Securing an HTTP API - No user password prompt and avoiding exposing the private key

我正在研究通過HTTP公開的API,這些API將由合作伙伴公司使用並部署到其眾多客戶端。

在某些情況下,客戶端將基於瀏覽器。 這是我的主要重點,但是當客戶端是Windows應用程序時,我可能會應用相同的模式。 我覺得當它是Windows應用程序而不是基於瀏覽器的應用程序時,在客戶端上保護私鑰的范圍更大。 因此,通信是從合作伙伴應用程序渲染的瀏覽器頁面到我們托管API的服務器的。

最重要的是,我們不能提示最終用戶輸入憑據,而必須依賴於每個請求將傳遞的存儲的密碼/密鑰/令牌。 我擔心的是,我希望阻止合作伙伴公司將此令牌烘焙到客戶端代碼中。 以下是該方案的高級描述。

  1. 合作伙伴與我們建立一個帳戶(手動流程),執行必要的開發工作以使用其產品中的API,然后將其推出給客戶。
  2. 然后,客戶運行產品並通過向導與我們建立帳戶。 我們可以在此時提示用戶輸入用戶名和密碼,但是以后對API的所有請求都不應提示實際的最終用戶輸入憑據。
  3. 然后,他們執行許多業務流程,這些業務流程會在許多不同用戶上下文下的許多工作站上調用我們的API。 我們與個人用戶信息無關。

出於這個問題的目的,我將跳過步驟1,而將重點放在步驟2和3。

我目前正在努力保護此API的安全,並提出了以下設計方案:

  • 到處都是HTTPS(所有請求都使用SSL / TLS)
  • 所有POST請求均使用CSRF令牌
  • 在客戶創建帳戶的第2步中,我們為他們提供了客戶驗證碼。 合作伙伴應編碼其應用程序,以將該身份驗證代碼存儲在服務器上。
  • 在將來調用我們的API之前,它們會在我們的javascript庫上調用Init函數並提供回調,例如“ GetAuthToken”。
  • 在對API的每次調用中,我們都會檢查(在服務器上)是否有Auth Token,如果沒有,則返回錯誤並調用回調。
  • 合作伙伴在實施回調時應使用HTTPS調用其服務器以檢索令牌。 該請求將接受其常規身份驗證,因此可以假設,如果用戶在其系統中通過了身份驗證,則他們可以檢索Auth令牌。
  • 我們收到身份驗證令牌,致電我們的服務器以對其進行驗證,然后設置包含令牌的HTTPOnly cookie。
  • Cookie過期后,我們再次調用GetAuthToken回調。
  • 使用postMessage管理跨域問題
  • 我們可以使Auth令牌可撤消

我們在這里有一種聯合安全性形式,如果用戶通過合作伙伴進行了身份驗證,則我們假定他們可以訪問我們的API。 我能想到的避免將私鑰/身份驗證令牌烘烤到客戶端代碼中的唯一方法是此回調機制。

我是否使它復雜化了? 還有其他更簡單的方法嗎? 我意識到,無論哪個站點對XSS開放或受到惡意軟件的侵害,所有賭注都被取消,但至少通過不將私鑰呈現為javascript或標記,用戶無法右鍵單擊查看源並告訴所有人私鑰。

編輯:找到了這個問題。 最佳答案描述的內容與我所描述的類似,盡管提到了WIF,但我不想強迫合作伙伴實施(它們甚至可能沒有運行Windows)。 不過,我仍然希望獲得有關我的方法的反饋...

Web應用程序-跨域的用戶身份驗證

我知道您在要求簡化,但是您是否走過探索SAML聯盟的道路,在該聯盟中,每個合作伙伴在啟動應用程序時都會向您聲明其身份,並使用auth令牌對其進行cookie? 它完全避免了JS的參與,並且與SSL + CSRF令牌結合使用可讓您處於一個不錯的位置。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM