1

任何尝试访问我的 webapp A 上的某些安全资源的用户都需要通过 webapp B 进行身份验证。B 可以访问用户凭据密码等,我想知道解决此问题的正确方法。

一种替代方法是使用过滤器保护我的安全页面。如果未经身份验证的用户从 A 访问 A 安全资源,则过滤器捕获请求并将浏览器重定向到 B 的登录页面。

B 将用户登录并将浏览器重定向到 A 服务器上的安全页面,以及一些 B 的会话 id 和一些指示用户已登录的令牌。

过滤器捕获从 B 到 A 的重定向,从 B 的请求头中提取身份验证令牌信息,并将用户记录到 A 的会话中。

来自浏览器的所有后续请求都将传递 B 设置的令牌。过滤器看到此令牌并认为用户已登录。

这听起来很理智还是我错过了大事?

另外- servletfilter 是完成此流程的最佳方式吗?web.xml 中的声明性安全性如何?如何使用声明性安全性完成相同的流程?

4

2 回答 2

0

感谢您的回复,维内特。我可能不太清楚,让我重新表述一下:A 是一个无法访问用户名密码的 Web 应用 B 是一个可以访问用户名密码的 Web 应用登录页面位于 B 上,A 只是重定向到它。

他们都生活在同一个域中,但不能共享会话等,出于所有实际目的,它们是完全独立的应用程序。

A 想要使用 B 对用户名/密码的访问权限并为用户创建登录凭据。

主体不直接传播,而是发回经过身份验证的用户 ID。

我知道使用 B 登录将在 B 中创建一个经过身份验证的会话,并且该会话与 A 无关。A 试图做的是:代替直接访问用户凭据,它让 B 这样做并使用来自 B 的 yea 或 nea 以创建经过身份验证的会话。毕竟什么是经过身份验证的会话 - 只是一个包含用户信息的会话,对吗?

我也想知道“身份断言”以及它与此有何关系......

于 2010-07-27T19:21:04.463 回答
0

为了使提议的方案起作用,您需要将容器配置为跨 Web 应用程序共享会话。除非我弄错了,否则这并非在所有容器中都可用,并且配置步骤因容器而异。在没有会话共享的情况下,Web 应用程序 B 将根本无法识别应用程序 A 创建的会话。WebLogic Server 允许会话共享;其他人可能会取得不同程度的成功。

您可以通过 Web 应用程序 B 中的声明性安全性来实现此方案(在跨应用程序共享会话之后) - B 的登录表单将具有将用户重定向到应用程序 A 的逻辑,他/她将在其中进行身份验证。不用说,我还没有尝试过。使用共享会话时要注意的一件事是,主体是否被传播,或者是否从第一个应用程序提供给第二个应用程序。

于 2010-07-27T09:21:55.700 回答