假設我們有一個非常簡單的 Java 應用程式,它編輯遠程服務器上的資源,并使用訪問令牌進行身份驗證。應用程式總是使用相同的身份,因此它總是使用相同的客戶端 ID、秘密和重繪 令牌來獲取訪問令牌。
整個身份驗證程序應該在沒有用戶干預的情況下進行,并且應用程式應該執行用戶從另一個應用程式自動觸發的操作。另一個應用程式正在發送 HTTP 請求,但整個事情只能在內部網路中訪問,并且沒有“合法”的方式可以在外部網路中訪問它。
有沒有辦法在我的應用程式中安全地保存這些資料(重繪 令牌、客戶端 ID、秘密......)?
我見過類似的問題,但他們都談到了網站和 cookie,但這應該發生在幕后,沒有任何前端等,所以我認為這些不適用于我的問題。
編輯:應用程式將部署在內部服務器上,因此它不是桌面解決方案。基本上有一個內部應用程式將向我發送 HTTP 請求,觸發內部網路外部的遠程服務器上的編輯。
uj5u.com熱心網友回復:
將客戶端機密、訪問令牌、重繪 令牌等存盤在持久性存盤中并不是一個好主意,除非它存盤在機密存盤(如 Vault)中。但還有其他選擇。
如果您使用的是 Spring,那么您可以使用 Spring OAuth2RestTemplate或者您可以通過查看代碼來撰寫類似的內容。
它透明地獲取或更新訪問令牌并快取以避免往返授權服務器。
uj5u.com熱心網友回復:
最簡單的選擇是使用記憶體存盤,但如果由于您需要處理重新啟動等而無法使用,則作業系統會為每個用戶提供安全存盤。這是 OAuth 桌面或控制臺客戶端有時使用的模型:
- Windows 上的憑據管理器
- macOS 上的鑰匙串
- Linux 上的密碼和密鑰
通過使用諸如java-keytar之類的庫,將需要一些本機互操作來與這些憑證存盤進行互動。
桌面示例
要比較的東西,請參閱我的這些資源:
- Node.js 桌面 keytar 代碼
- 這篇博文最后有一些相關的截圖
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/416030.html
標籤:
