gpt4 book ai didi

angularjs - 处理 AJAX 请求上的 SAML 重定向

转载 作者:行者123 更新时间:2023-12-03 22:25:44 25 4
gpt4 key购买 nike

我有几个 AngularJS 应用程序都使用 Spring/Java 和 SAML 2.0 进行 SSO(利用 Spring Security SAML 扩展)。我的 SSO id 提供程序是 OpenAM,一切运行良好。但是,我遇到了这样一种情况:用户从一个应用程序中进行全局注销,但打开了其他选项卡。由于这些是单页 web 应用程序,许多功能在孤立的选项卡中可能仍然可用,直到用户执行某些操作来调用 ajax 请求。当然,这些 AJAX 请求会被 Spring Security SAML 过滤器拦截,并通过对 OpenAM 登录 URL 的 REDIRECT 触发身份验证尝试。当然,这会对浏览器造成严重破坏,因为 AJAX 请求不允许重定向到另一个域。此外,我真的无法使用 Angular 的 $http 拦截器做任何事情,因为请求被“取消”并且 $http 错误回调函数中没有可用的质量信息(例如方便的 401/403 状态代码)。我所知道的是请求失败。

我不想假设所有错误的 $http 请求都是由于身份验证问题(并执行 $window.location.reload()),因为可能有合法的失败原因。我的偏好是抑制 ajax 请求的 Spring Security 重定向(到 OpenAM 登录页面),而是发送回 401/403 状态代码。这将允许我处理 $http 拦截器中的错误并在身份验证失败时加载整个页面,从而优雅地重定向到登录页面,就像他们第一次访问该站点一样。

关于如何实现这一点的任何想法?

最佳答案

负责初始化身份验证和决定返回 HTTP 错误、执行重定向等的 bean 是 AuthenticationEntryPoint 的一个实例。 .要更改其行为,您可以:

  • 定制当前SAMLEntryPoint (扩展 commence 方法)并在请求是来自 Angular 的 AJAX 调用的情况下覆盖默认行为,因此它返回 HTTP 错误而不是执行重定向到 IDP
  • 或定义另一个 security:http Spring 上下文中的元素(在当前上下文之前)仅涵盖您的 AJAX 请求(例如,具有属性 pattern="/api/**" )并使用以您想要的方式运行的入口点(请参阅 Http403ForbiddenEntryPoint )
  • 关于angularjs - 处理 AJAX 请求上的 SAML 重定向,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26047854/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com