angularjs - Siteminder SSO + Spring Security + Angular JS

标签 angularjs spring-security single-sign-on siteminder

我见过很多示例,其中有一个带有 Angular JS 的自定义登录页面,然后我们使用用户名/密码进行 rest POST 调用,然后 Spring 根据我们提供的任何 Auth 服务进行身份验证。然后我们收到成功,从 Spring Security 抓取用户对象,然后在 Angular 中创建一个 Session cookie。 https://github.com/witoldsz/angular-http-auth/blob/master/src/http-auth-interceptor.js

我还看到,将 Siteminder 与 Spring Security 集成在一起,我们在 Web 服务器上安装策略代理,然后使用 Spring Security 获取请求 header ,然后拉取 Angular 色并构建用户配置文件对象。

我正在寻找一种可以将上述两者结合起来的解决方案。这是场景:

当用户请求 index.html (Angular) 时,Web 服务器上的策略代理会进行拦截,使用 Siteminder 登录页面进行身份验证,然后将 header 传递给应用服务器。应用服务器上的 Spring Security 将读取 header 并从我们的应用数据库中提取 Angular 色,然后构建一个用户配置文件对象。现在在这里,我想继续流程并显示 Angular 页面,但我想弄清楚,我如何将用户配置文件对象发送到 Angular ,因为此时 Angular 不进行 POST 调用。另外,我如何让 http-auth-interceptor 起作用,因为我需要不断检查用户是否仍然在 Angular 中的每个 View /状态发生变化时通过身份验证。

感谢帮助!谢谢!

最佳答案

您可以实现一个受 SiteMinder 保护的小型 JSON REST 服务“/your-app/profile”,读取和评估 header 并将结果作为 JSON 对象返回。

您的 Angular 应用程序(例如/your-app/index.html)也应该更好地受到 SiteMinder 的保护,这样当您在没有 session 的情况下访问它时,您会立即收到到 SSO 登录的重定向。此外,它必须在加载时读取 JSON REST 资源“/your-app/profile”。它还必须预期在读取“/your-app/profile”时会丢失 SMSESSION 并做出相应的 react ——重新加载 protected index.html 页面以触发 SM SSO 重新登录(如果“/your-app/index.html”)。 html"是 protected ,否则您必须通过重定向到某些 protected 资源来触发登录)。

如果您想经常检查 SiteMinder session 是否仍然存在,您可以访问“/your-app/profile”或检查是否存在 SMSESSION cookie(仅在未设置为 HTTP 的情况下) - 仅)。

一个安全注意事项:如果您依赖通过 SMSESSION cookie 提供的无缝 SSO,请注意可能的 CSRF(跨站点请求伪造)攻击!

关于angularjs - Siteminder SSO + Spring Security + Angular JS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27530175/

相关文章:

javascript - 与路由提供程序一起使用时,Angular JS ng-grid 不会填充数据

javascript - 不同选项卡中 Controller 之间的 Angularjs 通信

php - SimpleSAMLPHP 重定向循环

salesforce - 与 SalesForce.com 的 SSO

javascript - 如何在angular js的重复中间停止ng-repeat

javascript - 如果编辑中下拉值发生变化如何执行函数?

spring - java.lang.IllegalStateException(未找到方法) : Calling MockMvc. 使用自定义 Filter 在一次测试中执行多次

Grails 3 Spring Security 递归构造函数调用

grails - 从过滤器访问 Controller 方法所需的角色/权限

Java:访问使用 SAML 身份验证的 API