【问题标题】:Tomcat and Jaas authentication servlet in a form-based security constraint基于表单的安全约束中的 Tomcat 和 Jaas 身份验证 servlet
【发布时间】:2014-06-13 12:57:38
【问题描述】:

我有一个安全约束,涵盖了我的 Web 应用程序中的一些页面。使用 JAAS 和表单进行身份验证,并且工作正常。 (我已经成功实现了我的 LoginModule)。

但是我需要通过 servlet 进行备用身份验证。

这是servlet的代码:

try {
    TokenCallbackHandler tokenCallbackHandler = new TokenCallbackHandler(properties,token);

    LoginContext lc = new LoginContext("myApp", tokenCallbackHandler);
    lc.login();
} catch (LoginException e) {
    e.printStackTrace();
}

调试代码我看到调用初始化、登录和提交都没有错误。 servlet 返回一个带有 js 的 html 页面,该页面重定向到受保护的资源:

function doRedirect() {
    location.href = "/protectedPath/ProtectedResource.html";
}
window.setTimeout("doRedirect()", 1);

但是当浏览器试图获取受保护的页面时,应用服务器会返回登录页面。

我错过了什么? 使用 js 重定向可能会丢失会话 cookie? 或者,问题是否可能是我正在尝试(通过重定向)从未受保护的资源访问受保护的资源?

-- 编辑 ---

我查看了 cookie:当我使用 servlet 登录时,它返回一个会话 cookie,当我尝试获取受保护的资源时,我可以看到浏览器将该会话 cookie 传递给服务器,但似乎它被拒绝了,实际上它用另一个会话 cookie 响应,进入登录表单页面

-- 编辑 ---

用另一种方式解决。

在对tomcat身份验证机制进行了一些调查之后,我意识到我试图做的事情是错误的。

已经定义了一个安全约束和一个表单登录配置来保护我的资源,我已经告诉 tomcat 以它的方式管理身份验证。因此,只要我没有通过 tomcat 身份验证工作流程,我就无法验证任何内容。我还发现不可能在同一个 Web 应用程序中配置不同的登录配置,因此定义了表单身份验证会阻止我以其他方式进行身份验证。可能我需要的是 BaseAuthenticator 类的自定义实现(FormAuthenticator、BasicAuthenticator 等的基类,包含相应登录配置的代码),但我不确定这可能是一个好主意,也许是一个安全过滤器将是一个更好的解决方案。

对 tomcat 中的安全过滤器有所了解,我暂时设法解决了在我的 servlet 中模拟表单身份验证的问题(我知道,真的很糟糕)。

【问题讨论】:

  • 成功登录后,您是否在 servlet 代码中的任何位置创建会话?
  • 如果它被拒绝,那么要么是 cookie 上的路径不同,要么是 cookie 在设置时不安全,但您正在重定向到安全端点?
  • 好建议,我在 servlet 中创建了一个新会话,但没有任何改变,但是现在我尝试使用测试,形成我可以看到的表单身份验证返回一个 set-cookie 标头。跨度>
  • 我正在重定向到安全成本约束所涵盖的路径中的页面。也许cookie不安全?我必须检查一下,从现在开始,当我调用我的 servlet 并且 servlet 返回相同的 cookie 时,我可以看到 cookie 从浏览器开始。
  • cookie 的值有变化吗?登录后,检查 cookie 的值,然后在重定向后检查值。如果它们不同,那就可以解释了。

标签: java tomcat servlets jaas security-constraint


【解决方案1】:

如果您想认真对待身份验证和授权管理,您应该考虑使用完善的框架,例如Apache ShiroSpring Security。后者至少允许并发身份验证模式(基本的 http 和登录表单作为默认值,但许多其他可能)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-09-10
    • 2016-05-07
    • 2015-06-19
    • 1970-01-01
    • 1970-01-01
    • 2014-07-30
    • 1970-01-01
    • 2012-07-12
    相关资源
    最近更新 更多