ограничение того, кто может войти по роли с помощью аутентификации на основе форм j2ee - PullRequest
1 голос
/ 30 мая 2011

Я использую декларативную аутентификацию на основе форм 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, здесь:

<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, настроенный для использования пользовательского репозитория O / S, в Windows XP / 2000/2003.

Ответы [ 2 ]

2 голосов
/ 31 мая 2011

Для тех, кто считает это полезным, я нашел альтернативное решение на основе описания здесь: 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>

, то каждый раз, когда пользователь получает доступ к защищенной странице с неправильной ролью, ему показываетсястраница, объясняющая, что у них недостаточно прав для доступа к странице.

Если единственной незащищенной страницей в приложении является страница входа в систему, то они увидят эту страницу сразу после входа в систему.

2 голосов
/ 30 мая 2011

Есть ли способ ограничить проверку подлинности для пользователей с определенной ролью?

Нет.Аутентификация - это процесс установления личности, а не принудительный контроль доступа.Вот как JAAS (и, следовательно, Спецификация сервлета Java) относится к этой теме;большинство других систем также реализуют аутентификацию аналогичным образом.

Если вы можете изменить приложение для отображения «защищенной страницы», только если пользователь находится в определенной роли (Servlet API позволяет это через isUserInRole (метод HttpServletRequest), тогда вы избавите себя от изжоги (при реализации приведенного ниже совета).

Или я должен убедиться, что область пользователя содержит толькопользователи с необходимой ролью.

Вы можете сделать это, если это возможно.Однако вы также можете обойти эту проблему, написав свой собственный JAAS LoginModule, который успешно аутентифицирует пользователя только тогда, когда пользователь также сопоставлен с требуемой ролью (которую распознает код вашего приложения).Вам также необходимо настроить сервер приложений и веб-приложение для использования этого модуля входа в систему.

...