簡體   English   中英

SSO 和 SAML - 多個服務提供商

[英]SSO and SAML - Multiple Services Providers

我有兩個使用 Spring Security SAML 擴展保護的 Spring Boot 應用程序。 這兩個應用程序已經在運行。 第一個 (web-ui-app) 是第二個 (services-app) 的用戶界面,一個 REST API。

在成功訪問 web-ui-app 並通過身份提供商正確驗證后,我嘗試訪問一些 services-app 的方法。

但是,我收到的不是來自 services-app 的正確響應,而是一個 JSON 響應:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
   <body onload="document.forms[0].submit()">
      <noscript>
         <p>
            <strong>Note:</strong> Since your browser does not support JavaScript, you must press the Continue button once to proceed.
         </p>
      </noscript>

      <form action="https://ServiceProvider.com/SAML/SLO/Browser" method="post">
         <div>
            <input type="hidden" name="RelayState" value="0043bfc1bc45110dae17004005b13a2b"/>
            <input type="hidden" name="SAMLRequest" value="PHNhbWxwOkxvZ291dFJlcXVlc3QgeG1sbnM6c2FtbHA9InVybjpvYXNpczpuYW1lczp0YzpTQU1MOjIuMDpwcm90b2NvbCIgeG1sbnM9InVybjpvYXNpczpuYW1lczp0YzpTQU1MOjIuMDphc3NlcnRpb24iDQogICAgSUQ9ImQyYjdjMzg4Y2VjMzZmYTdjMzljMjhmZDI5ODY0NGE4IiBJc3N1ZUluc3RhbnQ9IjIwMDQtMDEtMjFUMTk6MDA6NDlaIiBWZXJzaW9uPSIyLjAiPg0KICAgIDxJc3N1ZXI+aHR0cHM6Ly9JZGVudGl0eVByb3ZpZGVyLmNvbS9TQU1MPC9Jc3N1ZXI+DQogICAgPE5hbWVJRCBGb3JtYXQ9InVybjpvYXNpczpuYW1lczp0YzpTQU1MOjIuMDpuYW1laWQtZm9ybWF0OnBlcnNpc3RlbnQiPjAwNWEwNmUwLWFkODItMTEwZC1hNTU2LTAwNDAwNWIxM2EyYjwvTmFtZUlEPg0KICAgIDxzYW1scDpTZXNzaW9uSW5kZXg+MTwvc2FtbHA6U2Vzc2lvbkluZGV4Pg0KPC9zYW1scDpMb2dvdXRSZXF1ZXN0Pg=="/>
         </div>
         <noscript>
            <div>
               <input type="submit" value="Continue"/>
            </div>
         </noscript>
      </form>
   </body>
</html>

這是 SSO 對話。 因為我已經通過 web-ui-app 登錄,所以它不是應該是 services-app 和服務提供商之間的透明密鑰交換嗎?

我錯過了什么?

SAML 可用於通過 rest API 保護單個應用程序,但是,具有不共享應用程序或會話上下文的單獨前端和后端不起作用。 例如,如果您有一個包含前端的單個應用程序並將其配置為單個服務提供者,則會話將對后端 API 請求有效。

話雖如此,如果您將前端配置為服務提供者,您可以像您提到的那樣為 REST API 使用基於無狀態令牌的安全性。 這種架構是首選,因為它比會話更好。 任何請求都應該能夠轉到 REST API 的任何實例並得到處理,因此您可以添加或刪除 API 實例以根據需要擴展應用程序。

JSON Web Tokens (JWT)是一個不錯的選擇,因為它允許您在令牌內的自定義聲明中存儲有關用戶的一些信息。 如果其余 API 的所有實例都使用相同的共享密鑰對令牌進行簽名,則任何請求都可以發送到任何實例,並且該實例將能夠解碼令牌並獲取聲明信息(例如用戶 ID),而無需存儲它在內存緩存或數據庫中。

暫無
暫無

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

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