angular - Angular 应用程序和另一个 Java/Servlet/JSP 应用程序之间基于 SAML 的 SSO
问题描述
我有一个场景,用户登录和凭据在客户端 IDP 中维护。作为服务提供商,我们有 2 个 Web 应用程序。
- App-1:在 Angular 9 中开发
- App-2:它是一个 COTS 产品,其中 Web 应用程序是一个运行在 WebSphere Application Server 上的 Servlet JSP 应用程序。
现在,第二个应用程序不支持 SP 发起的身份验证。因此,我们正在考虑的流程是:
- 第 1 步:用户访问 Angular 应用程序
- 第 2 步:Angular App 将所有用户存储和维护在系统中(登录凭据除外)
- 第 3 步:Angular App 将用户路由到 User IdP (Azure AD) 以通过 OIDC 进行身份验证,并将带有用户 ID 和角色详细信息的 Token 返回给 Angular App。
- 第 4 步:Angular App 从应用程序数据库中检索所有用户属性。
- 第 5 步:现在 Angular App 将创建一个 SAML 请求并将其发送到 App-2。
上述流程是否可行,并且可以共享一些关于如何从 Angular 为 App-2 SSO 设置 SAML 生成的文档链接。
解决方案
如果您使用的是 IdP 启动的流程,则第 5 步是 App-1 从 SP 切换到 IdP 的地方。App-1 创建一个包含用户身份验证信息和属性的 SAML 响应。不应将特定于 Azure 的属性发送到 App-2,因为它与该 IdP 没有关系。它仅与作为 IdP 的 App-1 有关系。
SAML 响应示例在这里。App-2 需要拥有 App-1 的 SAML 元数据才能验证签名等。您可以在此处构建 IdP SAML 元数据。
但是,请注意IdP 发起的 SSO 的危险。
推荐阅读
- java - 如何返回作为值存储在 HashMap 中的数组
- javascript - 如何修复此代码中未捕获的类型错误?
- java - 尝试创建一个数组来查找给定字符串中出现的字符。只允许使用 String 类中的方法 length 和 charAt
- awk - 如果条件匹配追加到行
- python - 列表对象没有属性列
- java - 无法从浏览器或 Postman 访问 Spring Boot 应用程序
- python - tkinter 定位对象:anchor
- nginx - 什么是NGINX [notice] signal process started 错误信息
- machine-learning - 时间序列预测的最佳算法?
- c# - 为每像素 C# 加入 16 位颜色