Spring Security SAML 断言过期和应用程序会话过期

2024-02-27

我对 SAML 断言到期与应用程序会话到期感到困惑。

简而言之,当我们将应用程序部署在容器中时,就会创建一个会话。可以使用 web.xml 中的以下条目控制此会话过期

<session-config>
    <session-timeout>60</session-timeout>
</session-config>

继续,当我拥有带有 SAML 扩展的 Spring Security 时,显然相同的会话概念适用。 (我正在 WildFly 8.2 中部署应用程序,如果这很重要的话)

此外,当应用程序会话过期时,注销行为似乎等同于本地注销概念。

到目前为止,一切都很好。现在假设 SAML 断言在 2 小时内有效,并且用户已经积极工作了 2 小时。那么接下来的请求会发生什么情况呢?是否应该重新登录 IDP?但是,这对用户来说不是很不方便吗?如果应用程序在断言到期 2 小时后重定向到 IDP 再次登录,应如何处理 AJAX 请求?

这是参考问题在这里 https://stackoverflow.com/questions/26047854/handling-saml-redirects-on-ajax-requests


Spring SAML 发出ExpiringUsernameAuthenticationToken对于经过身份验证的用户。令牌开始在其内部返回 falseisAuthenticated()一旦用于验证用户身份的 SAML 断言达到其sessionNotOnOrAfter time.

可以通过覆盖来禁用此行为SAMLAuthenticationProvider和改变方法getExpirationDate(credential),返回断言过期的时间,或者null万一它永远不会发生。然后,应用程序将完全依赖容器中配置的会话过期时间。

一旦ExpiringUsernameAuthenticationToken过期后,Spring Security 会将当前令牌传递给AuthenticationManager(在 securityContext.xml 下配置<security:authentication-manager>).

您可以通过添加自己的内容来影响接下来发生的事情AuthenticationProvider能够处理ExpiringUsernameAuthenticationToken。否则系统会失败ProviderNotFoundException或其他一些AuthenticationException like BadCredentialsException(如果您同时使用用户名/密码身份验证)。

该异常随后由ExceptionTranslationFilter,通过调用配置的身份验证来启动新的身份验证过程EntryPoint - e.g. SAMLEntryPoint它要么使用默认 IDP 启动身份验证,要么显示 IDP 选择页面。正如您所说,该过程本质上还将执行本地注销。

默认情况下,系统对所有 HTTP 调用的行为都相同 - 无论是否使用 AJAX。您可以通过将 API 和普通 URL 拆分为单独的来定义不同的行为<security:http>元素并使用不同EntryPoints(界面AuthenticationEntryPoint)对于每个。例如Http403ForbiddenEntryPoint可能适合您的 AJAX 调用。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Spring Security SAML 断言过期和应用程序会话过期 的相关文章

随机推荐

  • 将图像设置为图像源时覆盖(重新保存)图像时出现问题

    大家好 我在图像权限方面遇到一些问题 我正在从文件加载图像 调整其大小 然后将其保存到另一个文件夹 然后我像这样显示 uriSource new Uri Combine imagesDirectoryTemp generatedFileNa
  • 使用 jQuery POST json 来表达

    我在将 JSON 数据从客户端发送到运行 Express 的节点服务器时遇到问题 这是一个简单的服务器 它演示了我的问题 var express require express var app express app configure f
  • Firefox Addon 观察者 http-on-modify-request 无法正常工作

    我有一个weird我的插件中的错误 插件本身需要添加特定域的请求头参数 一切正常 但错误是 观察者 http on modify request 在开始时不会被调用 只有当我重新加载页面时 它才会工作 I mean 我访问 mysite c
  • python - 从图表区域中切出双条

    I am plotting a double bar graph and line graph on the same chart For the first and last x tick only one bar is visible
  • 在 JavaScript 中,confirm() 是如何工作的

    我当时正在思考 JavaScript 中的原生函数是如何工作的 我可以跨越alert 我想它必须使用createElement 或制作一个元素并使用innerHTML 但我无法弄清楚创建弹出元素并创建两个按钮 然后返回所需的完整代码true
  • 摩卡的全局“before”和“beforeEach”?

    我现在使用 mocha 进行 javascript 单元测试 我有几个测试文件 每个文件都有一个before and beforeEach 但它们是完全相同的 我如何提供全球before and beforeEach对于他们所有人 或其中一
  • 如何使用 HTML5 本地存储保存表单中的数据?

    我有一个表单可以登录到一个网站 但不能登录到我的网站 我希望它们通过 HTML5 本地存储保存在我的网站中的表单数据 但不知道如何 任何想法 我的表格是这样的
  • YouTube 嵌入式播放器在 iOS 8 上因 gpus_ReturnNotPermissionKillClient 而崩溃

    我使用 UIWebView 制作了一个 iOS 应用程序 它加载 YouTube iFrame 播放器 一切都很顺利 它甚至可以继续在后台播放视频 只有一个问题 这个问题是这个月才出现的 而且不仅出现在最新的更新 iOS 8 3 上 而且出
  • Dropzone.js 和 ajax

    我使用 dropzone js 并使用 ajax 加载它 我的菜单 ID menu 上传文件应出现在 div1 中 回调函数不起作用 我用alert test 替换了Dropzone discover document ready func
  • 编译简单字符串

    只是想知道 c 或 c 中是否有任何内置函数可以让您在运行时使用编译器 例如 如果我想翻译 print hello world into MessageBox Show hello world 然后生成一个exe 然后就可以显示上面的消息了
  • Django:如何通过可视化创建用户操作日志/跟踪

    我正在寻找一种工具来跟踪用户操作 例如 用户已登录 用户更改密码 用户通过电子邮件收到帐单 用户登录 用户上传的图片 用户发送消息 我可以将其包含到我的 Django 项目中 之后我想构建查询并向系统询问以下内容 用户在一个月内发送消息的频
  • redux getState() 不返回更新后的状态

    让我卡住了好几天的问题是 虽然我的 redux devtool 显示成功的状态更新 没有任何类型的突变 并且视图组件重新渲染成功 但是当我调用 getState 时 它总是返回初始状态并且不关心更新状态 任何知道什么会造成这种情况的人请帮助
  • 在Python中从数组中删除空元素

    with open text txt r as file for line in file line line rstrip n split print line 我在尝试删除正在生成的一系列数组中的空列表时遇到问题 我想让每一行都成为一个
  • Realm Studio:无法打开领域...顶部数组无效(参考:34280,大小:11)

    Realm 正在我的反应本机应用程序中运行 在 iPad 模拟器上运行 我找到了 default realm 文件 但在尝试使用 Realm Studio 打开它时收到错误 无效的顶部数组 Realm Studio 可以很好地打开下载的演示
  • 重新抛出 InvocableTargetException 目标异常

    如何重新抛出 IncationTargetException 的目标异常 我有一种方法 它使用反射来调用我的一个类中的 invoke 方法 但是 如果我的代码中抛出异常 我不关心 InvocableTargetException 只需要目标
  • D3:如何显示大数据集

    我有一个包含 10 5 个数据点的大型数据集 现在我正在考虑以下与大数据集相关的问题 有没有有效的方法来可视化非常大的数据集 就我而言 我有一个用户集 每个用户有 10 3 个项目 总共有 10 5 项 我想一次显示每个用户的所有项目 以便
  • 如何用cookie记住显示和隐藏div

    我有这样的 HTML div content is visible div div Button Expand div 我使用 Jquery 显示 隐藏 div 如下所示 document ready function expand hid
  • 如何获取mysql中最后一条之前的最后一条记录?

    如果最后一条记录是记录 35 如何获取表的记录 34 最简单的方法 SELECT FROM tab ORDER BY col DESC LIMIT 1 1 这将从第二个 LIMIT 1 1 开始选择一个记录 意味着跳过第一个并选择下一个 必
  • SignalR 中消息的最大限制

    我正在尝试通过 SignalR 发送通知 它工作完美 但是我们可以通过 SignalR 发送的消息的最大大小是多少 官方有这样的限制吗 https github com SignalR SignalR issues 1205 https g
  • Spring Security SAML 断言过期和应用程序会话过期

    我对 SAML 断言到期与应用程序会话到期感到困惑 简而言之 当我们将应用程序部署在容器中时 就会创建一个会话 可以使用 web xml 中的以下条目控制此会话过期