1

我在我的 web 应用程序中使用基于声明性 J2EE 表单的身份验证,遵循各个地方给出的说明,例如这里:http: //java.dzone.com/articles/understanding-web-security

看来通过 j_security_check 登录允许领域内的所有用户进行身份验证(登录),但不检查他们的角色。授权检查似乎只在用户访问具有安全约束的页面时执行。

因此,在我的应用程序中,用户能够成功登录,因为他们在领域中,但是当他们访问安全页面时,他们会收到一条丑陋的“错误 403:授权失败”消息。

有没有办法将身份验证限制为具有特定角色的用户?或者我是否需要确保用户领域仅包含具有所需角色的用户。

在代码方面,我的 web.xml 中有这个声明:

<login-config>
    <auth-method>FORM</auth-method>
    <realm-name>Simple</realm-name>
    <form-login-config>
        <form-login-page>/login.jsp</form-login-page>
        <form-error-page>/loginerror.jsp</form-error-page>
    </form-login-config>
</login-config>

但它没有说明所需的角色,因此导航到 login.jsp 的任何用户都可以成功登录,如果他们在范围内的话。

然后,当用户在此处访问与 url-pattern 匹配的任何页面时:

<security-constraint>
    <display-name>Authorised</display-name>
    <web-resource-collection>
        <web-resource-name>Authenticated and Authorised Resources</web-resource-name>
        <url-pattern>/secure/*</url-pattern>
        <http-method>PUT</http-method>
        <http-method>GET</http-method>
        <http-method>POST</http-method>
    </web-resource-collection>
    <auth-constraint>
        <role-name>simpleWebAppUser</role-name>
    </auth-constraint>
    <user-data-constraint>
        <transport-guarantee>INTEGRAL</transport-guarantee>
    </user-data-constraint>
</security-constraint>

那是检查角色的时候。

角色“simpleWebAppUser”是应用程序范围的,我想在让登录成功之前检查用户是否具有此角色。

我在 Windows XP/2000/2003 上使用 WebSphere 7.0,配置为使用 O/S 用户存储库。

4

2 回答 2

2

有没有办法将身份验证限制为具有特定角色的用户?

不是。身份验证是建立身份的过程,而不是执行访问控制检查的过程。这就是 JAAS(以及 Java Servlet 规范)处理这个主题的方式;大多数其他系统也将以类似的方式实现身份验证。

如果您可以修改应用程序以显示“安全页面”,仅当用户处于特定角色时(Servlet API 通过 HttpServletRequest 的isUserInRole方法允许这样做),那么您将节省一些心痛(在实现下面列出的建议)。

或者我是否需要确保用户领域仅包含具有所需角色的用户。

如果可能的话,你可以这样做。但是,您也可以通过编写自己的 JAAS LoginModule 来解决此问题,该模块仅在用户也映射到所需角色(您的应用程序代码可识别)时成功验证用户。您还必须配置应用程序服务器和 Web 应用程序以使用此登录模块。

于 2011-05-30T02:31:56.527 回答
2

对于任何觉得它有帮助的人,我根据这里的描述找到了一个替代解决方案:http: //software-security.sans.org/blog/2010/08/11/security-misconfigurations-java-webxml-files/

如果我将以下内容添加到 web.xml:

<error-page>
    <error-code>403</error-code>
    <location>/authorizationerror.jsp</location>
</error-page>

然后,每次具有错误角色的用户访问安全页面时,都会显示一个页面,说明他们没有足够的权限访问该页面。

如果应用程序中唯一不安全的页面是登录页面,那么他们将在登录后立即看到该页面。

于 2011-05-31T02:41:36.260 回答