【发布时间】:2014-11-20 18:34:23
【问题描述】:
我有几个 AngularJS 应用程序都使用 Spring/Java 和 SAML 2.0 进行 SSO(利用 Spring Security SAML 扩展)。我的 SSO id 提供者是 OpenAM,一切运行良好。但是,当用户从一个应用程序中进行全局注销但打开其他选项卡时,我遇到了这种情况。由于这些是单页 Web 应用程序,许多功能可能仍然可以在孤立的选项卡中使用,直到用户执行某些操作来调用 ajax 请求。当然,这些 AJAX 请求会被 Spring Security SAML 过滤器拦截,并通过重定向到 OpenAM 登录 URL 触发身份验证尝试。当然,这会对浏览器造成严重破坏,因为 AJAX 请求不允许重定向到另一个域。此外,我无法对 Angular 的 $http 拦截器做任何事情,因为请求被“取消”并且 $http 错误回调函数中没有可用的质量信息(例如方便的 401/403 状态代码)。我只知道请求失败。
我不想假设所有错误的 $http 请求都是由于身份验证问题造成的(并执行 $window.location.reload()),因为失败可能有合理的原因。我的偏好是抑制 ajax 请求的 Spring Security 重定向(到 OpenAM 登录页面),而是发回 401/403 状态代码。这将允许我处理 $http 拦截器中的错误并在身份验证失败时执行整个页面加载,从而优雅地重定向到登录页面,就好像他们第一次访问该站点一样。
关于如何实现这一点的任何想法?
【问题讨论】:
标签: angularjs spring-security saml-2.0 spring-saml