限制谁可以通过基于j2ee表单的身份验证的角色登录

时间:2011-05-30 02:13:56

标签: java java-ee security websphere-7

我在我的webapp中使用基于声明的J2EE表单身份验证,遵循各处提供的说明,例如:http://java.dzone.com/articles/understanding-web-security

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

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

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

就代码而言,我在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”是应用程序范围的,我想在让登录成功之前检查用户是否具有此角色。

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

2 个答案:

答案 0 :(得分:2)

  

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

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

如果您可以修改应用程序以显示“安全页面”,那么只有当用户处于特定角色时(Servlet API通过HttpServletRequest的isUserInRole方法允许这样做),那么您将节省你自己有些胃灼热(同时实施下面列出的建议)。

  

或者我需要确保用户   领域只包含用户   要求的角色。

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

答案 1 :(得分: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>

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

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