【问题标题】:Load user session with spring security使用 Spring Security 加载用户会话
【发布时间】:2017-12-09 05:21:42
【问题描述】:

我正在开发一个 Web 应用程序,它将在 Cisco Jabber 中用作自定义选项卡。

在我的应用程序中,用户需要登录。第一次身份验证是使用 Spring SAML (SSO) 完成的。如果此身份验证失败,则用户回退到其中一个身份验证过程:
- A:直接使用他的用户 ID(不是真正的身份验证,但某些客户端需要)
- B:登录表单(针对客户端数据库的身份验证)

问题是某些操作正在创建弹出窗口,而使用 Jabber 时,这些弹出窗口在 Internet Explorer 中打开,其中没有关于我的用户的任何信息,因此我的应用程序尝试再次对他进行身份验证。如果 SSO 正常工作,则用户无需执行任何操作,如果失败 auth A 工作正常,但如果选择了 auth B 则我有问题,因为我需要用户无需他输入凭据即可进行身份验证。

Spring、Spring Security 有没有办法将会话从 Jabber 复制到 IE 以跳过登录页面?

我按照这里的建议尝试将 jsessionid 设置为我的弹出 url 的参数,如下所示:

var logUrl = 'login.do' + (this.user === '' ? ';jsessionid=' + sessionId : '?userId=' + this.user);
var w = window.open(logUrl, number, 'width=800,height=600,resizeable=yes,scrollbars=yes,toolbar=no,location=yes,status=yes,menubar=yes');

问题是当用户打开弹窗时,url中的jsessionid和Jabber中的不一样。如果我尝试在 Jabber 中使用用户的 JSESSIONID 登录,则它不起作用。

是否有一些我没有设置的配置参数让它工作?

【问题讨论】:

  • 请将解决方案作为答案发布,而不是作为问题的更新。这是为了避免混淆。我已回滚您的编辑,您可以在 revisions 中看到。谢谢。

标签: java spring spring-mvc spring-security


【解决方案1】:

使用JSESSIONID cookie 跟踪会话,因此您可以将其作为 URL 参数传递给推荐。

但是,使用这种方法需要考虑 session hijacking 周围的安全问题。

例如,您必须使用 SSL/HTTPS。

更多信息请参见this answer

【讨论】:

  • 感谢您的回答。我已经更新了我的问题,因为我显然遗漏了一些我不知道的东西
  • 对于接受 cookie (stackoverflow.com/a/5868553/1258079) 的客户端,URL 中的 jsessionid 会被忽略。您可以在页面加载之前/页面加载时自己设置 cookie 吗?
  • 嗯,我不知道如何在加载之前/onpageload 之前添加 cookie,因为加载的页面直接是登录页面。我想我可以尝试打开一个“不安全”页面,在该页面上设置一个 cookie,然后重定向到正确的页面,但这似乎有点奇怪。实际上,现在我可以在当前浏览器之外重用 jsessionid。这意味着如果我在 chrome 上登录(不是客户端将执行的用例,只是测试),我可以将链接复制粘贴到 IE。但是在我的应用程序中打开一个新窗口仍然不起作用。我不知所措,但我想我想要达到的目标并不常见。
【解决方案2】:

解决方案:我们放弃了重用会话的想法,现在改用 jwt,因为它为我们实现了基本相同的目标。

【讨论】:

    猜你喜欢
    • 2019-09-13
    • 1970-01-01
    • 2021-02-06
    • 2015-12-26
    • 2011-04-02
    • 2014-11-03
    • 1970-01-01
    • 2011-12-10
    • 1970-01-01
    相关资源
    最近更新 更多