Безопасный вход с помощью JSP и Websphere - PullRequest
0 голосов
/ 15 марта 2012

Я проектирую безопасный вход в систему с помощью JSP.Я намерен использовать авторизацию форм для доступа к приложению в Websphere.Основная идея заключается в том, что когда внутренние, прошедшие проверку пользователи в домене получают доступ к странице, это происходит в обычном режиме.Однако, если внешние пользователи попытаются получить к нему доступ, он перенаправит их на страницу входа в систему, подключится к Active Directory и перенаправит их на страницу после правильной аутентификации.

Чтобы заставить его работать, я попыталсяизменить Web.xml, чтобы разрешить аутентификацию формы с помощью встроенного сервлета "j_security_check".После входа в систему он приветствует пользователя "Hello,!"с простой функцией <% request.getRemoteUser ()%> или <% request.getUserPrincipal (). getName ()%> .

На основе примеров, найденных здесь , я изменил свои данные Web.xml, как показано ниже:

<welcome-file-list>
    <welcome-file>/protected/index.jsp</welcome-file>
</welcome-file-list>

<security-constraint>
    <web-resource-collection>
        <url-pattern>/protected/*</url-pattern>
        <http-method>GET</http-method>
        <http-method>POST</http-method>
    </web-resource-collection>
    <auth-constraint>
        <role-name>admin</role-name>
        <role-name>users</role-name>
    </auth-constraint>
</security-constraint>

<login-config>
    <auth-method>FORM</auth-method>
    <form-login-config>
        <form-login-page>/login.jsp</form-login-page>
        <form-error-page>/error.jsp</form-error-page>
    </form-login-config>
</login-config>

<security-role>
    <description>Administrator</description>
    <role-name>admin</role-name>
</security-role>
<security-role>
    <description>Users</description>
    <role-name>users</role-name>
</security-role>

Под моим login.jsp у меня есть простая форма, которая выполняет вход в систему.

<form action="j_security_check" method="post">
    Username: <input type="text" name="j_username">
    Password: <input type="password" name="j_password">
    <input type="submit" value="Login">
</form>

В моем index.jsp он приветствует пользователей простым запросом.

<body>
    Hello, <% request.getRemoteUser(); %>
    Hello, <% request.getUserPrincipal().getName(); %>
</body>

Здесь я сталкиваюсь с тремя проблемами.Важность оценивается как есть.

1) Ошибка 403 Перенаправление и регистрация на странице работает.Когда я пытаюсь получить доступ к index.jsp, я перенаправляюсь на login.jsp.Когда я ввожу неверную пару uid: pwd, меня приветствует error.jsp.Когда я вхожу в систему правильно, меня перенаправляют обратно на index.jsp, но меня приветствует ошибка 403. Веб-сайт требует от вас входа в систему .Я уверен, что вошел в систему, потому что ранее я не мог получить доступ к встроенной странице snoop , но после входа я могу.Я подозреваю, что это некоторые настройки в моем Web.xml

2) Получение идентификатора пользователя Даже после отключения всех средств защиты в Web.xml и доступа к index.jsp меня приветствует " Hello, null!"вместо" Здравствуйте, пользователь!".Коды, показанные в index.jsp, должны быть правильными, поскольку я скопировал их из примеров кодов snoop, найденных в Интернете. request.getRemoteUser () не работает на моем index.jsp, но работает на странице отслеживания.Должно быть что-то, что я не вызываю перед выполнением запроса?

3) Безопасность (пока не важно) Я думаю, что этот j_security_check находится под Spring Security.Я пытаюсь зашифровать как отправляющую и принимающую стороны, так и транспортный канал.Это связано с тем, что для аутентификации пароль не должен быть отправлен или сохранен в виде открытого текста.Я нашел некоторую информацию здесь , которая заставила меня попытаться / попытаться защитить этот процесс аутентификации.

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

1 Ответ

2 голосов
/ 22 марта 2012

Если кому-то интересно, проблему легко решить с помощью конфигураций.

1) Назначая роли администратора и пользователя в Web.xml, нужно перейти в Websphere> .war> Роли и пользователи> и физически назначить роли администратора и пользователя ролям, как указано в Active Directory. Это позволит пользователю получить доступ к странице.

2) Также с конфигурацией Websphere в разделе «Конфигурации SPNEGO» необходимо добавить в список «|» чтобы включить это так, что запрос. После этого аутентифицированные пользователи в домене сразу получат доступ к элементу, а внешние пользователи будут перенаправлены на страницу входа. Request.getPrincipalUser () теперь работает.

3) Существует пример Spring Security, который работает. Единственная проблема заключается в том, что он обращается к локальному провайдеру аутентификации в своем ApplicationContextSecurity.xml вместо Active Directory. Для защиты канала, под <transport-guarantee>NONE</transport-guarantee>, NONE следует заменить на CONFIDENTIAL.

...