簡體   English   中英

從 spring 引導調用安全 Rest api

[英]Call a secure Rest api from spring boot

我有一個 spring 啟動應用程序,我需要調用一個安全的外部 api 來檢索數據。

在下面我遵循的步驟:

  1. 我使用用戶名和密碼生成令牌

  2. 我將令牌保存在臨時變量中

  3. 我在每個 resttemplate 調用中使用它

     headers.add("授權", "承載" + token);

我的問題是:

  • 保留生成的令牌並將其用於每個連接的用戶的最佳方法是什么?
  • 我們可以配置 spring 安全性來管理對外部 api 的調用嗎?

正如我所想的,您希望代理一個安全的休息 api 並響應您自己的用戶。 但是安全 api 需要身份驗證,並且您希望每個用戶擁有一個特定的 jwt。 您有兩種實現方法:

1- 使用內存令牌存儲,如 Redis,啟用持久性模式以實現可靠和可擴展。 請按照以下步驟操作:[為每個用戶檢查令牌是否已經生成並存儲在存儲中] -> [如果是,則獲取並將其分配給 restTemplate 請求的 header] -> [如果沒有從安全 API 獲取令牌並存儲它並從第一步開始重新開始]

提示:您可以通過 session 或 oauth 來識別您的每個用戶]

2-以前的解決方案不是最佳實踐,因為您應該有內存存儲,這將是您的瓶頸。 (您應該將其集群並垂直增加資源)。 所以下一個解決方案是在客戶端為每個用戶存儲令牌。 您應該按照以下步驟操作:[如果您自己的用戶將令牌發送到您的 rest api,您應該抓住它,驗證它,然后使用 restTemplate 轉發到安全 API] -> [否則這意味着您還沒有發送令牌給用戶,因此您應該獲取令牌 RESIGN 並回復用戶]

提示:你應該放棄你的安全算法從secure-api獲取的jwt-token,因為token被發送到客戶端並且token的內容可能有一些漏洞

第二種解決方案是忘記 In-Memory db,它的 IO/bound 增加了延遲。 但它會在您的 jwt 令牌上添加一個 CPU 綁定進程。 每個用戶都將其令牌存儲在瀏覽器中,您可以使用令牌來識別您的用戶,而不是使用會話或類似的東西。 因此,我強烈建議您閱讀有關簽名算法的信息,例如 sha(256,512,1024) 或其他一些類型的算法。

暫無
暫無

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

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