这是一个基本问题,但原因没有在任何地方明确说明。
假设我们有 2 个 Web 应用程序在
https://one.abc.com
和 htts://two.xyz.com
上运行。
我访问 https://one.abc.com
并显示一个页面,上面有一个按钮,单击后,提交到 https://one.abc.com
并重定向到 htts://two.xyz.com
进行响应。
在 htts://two.xyz.com
上有另一个按钮,单击后,提交到 htts://two.xyz.com
并重定向到 https://one.abc.com
进行响应。
由于一切都通过 https 进行,因此在两个重定向中,URL、查询参数、标头等所有内容都被加密。
使用上述设置,我们可以使用查询参数在 2 个 Web 应用程序之间进行数据交换。此外,我们可以使用 auto-form-post(使用 js 动态创建表单并自动提交)而不是查询参数进行数据交换。
此技术用于 SAML、OIDC 中的 SSO。
为什么即使在 https 上,通过查询参数/自动表单发布使用重定向的数据交换也不能被信任? 请查看以下答案并让我知道我的理解是否正确。
我的回答:
在所描述的从
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。