这是一个基本问题,但原因没有在任何地方明确说明。
假设我们有 2 个 Web 应用程序
https://one.abc.com
和 htts://two.xyz.com
。当我点击 one.abc.com
上的按钮时,它会通过 https 转到 one.abc.com
并重定向到 two.xyz.com
。对 two.xyz.com
进行一些处理后,它通过 https 重定向到 one.abc.com
。在这两种重定向中,URL、查询参数、标头等所有内容都被加密。
在这种情况下,为什么
one.abc.com
和two.xyz.com
之间通过查询参数或form_post交换的任何数据都不能被信任,即使它们在两者上都加密了。
此技术用于 SAML、OIDC 中的 SSO。
我的回答: 在所描述的从
one.abc.com
到 two.xyz.com
再回到 one.abc.com
的重定向流程中,TLS(传输层安全)加密是在您的浏览器和涉及的每个服务器之间单独建立的。让我们分解一下流程:
从
one.abc.com
到two.xyz.com
:
one.abc.com
上的登录按钮时,您的浏览器会通过 HTTPS(HTTP over TLS)向 one.abc.com
发起请求。one.abc.com
使用重定向响应(HTTP 302 Found)进行响应,指示您的浏览器转到 two.xyz.com
。two.xyz.com
发起新的 HTTPS 请求,在您的浏览器和 two.xyz.com
之间建立单独的 TLS 连接。从
two.xyz.com
回到one.abc.com
:
two.xyz.com
上成功进行身份验证后,它会重定向回 one.abc.com
进行响应。one.abc.com
的必要信息。one.abc.com
发起新的 HTTPS 请求,在您的浏览器和 one.abc.com
之间建立单独的 TLS 连接。每个连接(从您的浏览器到
two.xyz.com
以及从您的浏览器返回到 one.abc.com
)均使用 TLS 独立加密。 TLS 加密可确保浏览器和每个服务器之间通信的机密性和完整性,从而保护重定向流期间交换的数据。
但是,在重定向流程期间,
two.xyz.com
和 one.abc.com
之间没有建立直接的 TLS 连接。相反,HTTPS 连接会在每个服务器端点处单独终止和重新建立。
因此,在 SAML 中,IDP 签署 SAML 断言,而在 OIDC 中,OIDC 提供商签署 id_token。