我有一個網路應用程式 MyWebApp。
還有兩個 API:MyAuthAPI 和 MyServiceAPI,都是 RESTful NodeJS。MyAuthAPI 使用 HashiCorp Vault 作為 OAuth2 的令牌存盤。
MyServiceAPI 具有可用于經過身份驗證的客戶端的 CRUD 操作。
MyWebApp 上不需要(或不希望)人工登錄。任何人都可以通過瀏覽器訪問 MyWebApp 并運行該服務。
目前,這是(非常不安全的)流程:MyWebApp 將 clientid 和 clientsecret 發送到 MyAuthAPI 以檢索令牌。此令牌隨后用于與 MyServiceAPI 通信。
明顯的缺點是任何人都可以通過在 Web 瀏覽器中查看開發人員工具來捕獲 clientid 和 clientsecret。然后,他們可以使用它們通過 MyAuthAPI 進行身份驗證,生成自己的令牌,并在不涉及 MyWebApp 的情況下呼叫 MyServiceAPI。
那么我如何最好地保護整個應用程式,以便在不泄露憑據的情況下對 MyWebApp 進行安全可靠的身份驗證?
謝謝。
ETA:我希望能夠使用 MyAuthAPI 對 MyWebApp 進行身份驗證,然后使用生成的令牌連接到 MyServiceAPI。但我不希望任何人都可以攔截這些憑據 - 目前它們可以在請求標頭中看到為“授權:基本”
MyServiceAPI 端點必須受到保護,以便只有經過身份驗證的客戶端才能訪問它們。但是,當該客戶端 (MyWebApp) 是公共網站時,如何在不使憑據可見的情況下進行身份驗證?
預計到達時間2:
https://mywebapp.com is MyWebApp which is a React application.
https://myauthapi.com hosts MyAuthAPI
https://myserviceapi.com hosts MyServiceAPI
當我在 Web 瀏覽器中加載 mywebapp.com 時,它會使用 myauthapi.com/oauth/token 進行身份驗證以獲取令牌。目前,它通過在標題 Authorization: Basic 中發送憑據來完成此操作
然后保存回傳的令牌。然后,Web 應用程式嘗試使用此令牌從 MyServiceApi 上的端點獲取資料:授權:承載
GET https://myserviceapi.com/objects
or POST myserviceapi.com/objects
or GET myserviceapi.com/objects/objectid
or DELETE myserviceapi.com/objects/objectid
MyServiceAPI 使用 MyAuthAPI 驗證令牌,但這不是面向公眾的,因此沒有問題。
問題是,正如您從 Chrome 中開發者工具控制臺的附加螢屏截圖中看到的那樣,任何使用 Web 應用程式的人都可以看到包含憑據的 Authorization 標頭,然后可以使用這些憑據以編程方式獲得對身份驗證 API 的訪問權限生成一個令牌,然后可以在服務 API 端點上使用該令牌。我想限制對 API 服務器的所有訪問僅來自 mywebapp.com 上的特定應用程式,例如 MyWebApp。
uj5u.com熱心網友回復:
首先,我認為這個問題最好在https://softwareengineering.stackexchange.com/ 中提出。
二、MyWebApp部署在哪里?它是如何被使用的?如果它適用于https,那么正文是加密的,當您發送clientId和clientSecret時,您應該將其發送到正文中,因此用戶將無法看到它們。
uj5u.com熱心網友回復:
客戶憑證授予僅應由機密客戶使用。那是因為您不能在非機密客戶端上隱藏 client_secret。您的前端似乎是一個非機密的客戶端。
通常,您應該將授權代碼授予與 PKCE 一起使用。但是您需要用戶為此進行身份驗證。
uj5u.com熱心網友回復:
感覺你需要一個基于標準流程的架構設計,因為 OAuth 應該是這樣作業的:
- Web 應用程式使用授權代碼流 (PKCE) 通過授權服務器登錄用戶
- Web 應用程式從授權服務器獲取令牌
- Web 應用程式使用訪問令牌呼叫 API
- API 使用來自授權服務器的資料驗證令牌
- API 然后信任訪問令牌中的宣告并使用它們進行授權
請參閱我的初始 HTTP 訊息博客文章以獲取有關其外觀的示例。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/338726.html
標籤:节点.js 验证 oauth-2.0 证书 hashicorp-保险库
