Siteminder SSO + Spring Security + Angular JS
Posted
技术标签:
【中文标题】Siteminder SSO + Spring Security + Angular JS【英文标题】: 【发布时间】:2015-02-16 06:31:40 【问题描述】:我见过很多例子,其中有一个使用 Angular JS 的自定义登录页面,然后我们使用用户名/密码进行休息 POST 调用,然后 Spring 根据我们提供的任何身份验证服务进行身份验证。然后我们收到一个成功,从 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 获取请求标头,然后拉取角色并构建用户配置文件对象。
我正在寻找一种可以将上述两者结合起来的解决方案。这是场景:
当用户请求 index.html (Angular) 时,Web 服务器上的策略代理会拦截,使用 Siteminder 登录页面进行身份验证,然后将标头传递给应用服务器。应用服务器上的 Spring Security 将读取标题并从我们的应用数据库中提取角色,然后构建一个用户配置文件对象。现在在这里,我想继续流程并显示角度页面,但我想弄清楚如何将用户配置文件对象发送到角度,因为角度此时没有进行 POST 调用。另外,我如何让 http-auth-interceptor 发挥作用,因为我需要继续检查用户是否仍然在 Angular 中每个视图/状态的更改上通过身份验证。
帮助表示赞赏!谢谢!
【问题讨论】:
请更新链接。 @DonaldDuck:完成 【参考方案1】:您可以实现一个受 SiteMinder 保护的小型 JSON REST 服务“/your-app/profile”,读取和评估标头并将结果作为 JSON 对象返回。
您的 Angular 应用程序(例如 /your-app/index.html)最好也受到 SiteMinder 的保护,以便在没有会话的情况下访问 SSO 登录时,您会立即收到重定向到 SSO 登录。此外,它必须在加载时读取 JSON REST 资源“/your-app/profile”。它还必须预期在读取“/your-app/profile”时缺少 SMSESSION 并做出相应反应 - 重新加载受保护的 index.html 页面以触发 SM SSO 重新登录(如果“/your-app/index.html” html”是受保护的,否则你必须通过重定向到某个受保护的资源来触发登录)。
如果您想经常检查 SiteMinder 会话是否仍然存在,您可以访问“/your-app/profile”或检查 SMSESSION cookie 的存在(仅在未设置为 HTTP 的情况下) - 仅)。
一个安全注意事项:如果您依赖通过 SMSESSION cookie 提供的无缝 SSO,请注意可能的 CSRF(跨站点请求伪造)攻击!
【讨论】:
但是我也会创建 Spring 会话对吗?会有 SMSESSION 和 JSESSION 吗? 如有必要,您可以创建 HttpSession (JSESSION),但这不是强制性的,也不会自动绑定到 SMSESSION。如果创建 HttpSession 你应该检查每个请求是否 SMSESSION 没有改变 - 否则你可能有一个严重的漏洞。请记住,依赖 REST 服务中的会话是不良架构的标志。 @VilmantasBaranauskas 我有和你类似的情况,我们使用 SiteMinder、angular 和 cordova 在 SiteMinder 后面调用 Rest API。但是我们面临登录 UI 的返回。我的问题是如何实现这个来调用 API? @VilmantasBaranauskas - 我将 SSO (Siteminder) 用于 AngularJS + Spring Boot + Spring Security 应用程序。一段时间后我得到 SMSESSION=LOGGEDOFF 的问题。如何触发 SM SSO 重新登录?谢谢。 @AmitG.,正如答案中已经提到的,如果您的 AngularJS 受 SiteMinder 保护,页面重新加载将是正确的选择:***.com/questions/3715047/…【参考方案2】:如果按照描述完成集成,显然角色和用户名都将在 spring 中可用
Integrating Spring Security with SiteMinder
【讨论】:
以上是关于Siteminder SSO + Spring Security + Angular JS的主要内容,如果未能解决你的问题,请参考以下文章
Spring security CAS SSO 每次询问登录凭据时