Weblogic 10.3: безопасность Webapp с использованием ролей web.xml и DB в консоли WLS - PullRequest
2 голосов
/ 19 апреля 2011

Сценарий

Мы используем Weblogic Server 10.3.4 для запуска нашего веб-приложения, в котором включены ограничения безопасности, чтобы пользователь мог войти в систему, прежде чем он / она сможет использовать приложение.Информация о пользователе и группе должна храниться в базе данных приложения, аутентификация должна обрабатываться WLS (контейнером).

Я настроил схему базы данных как , описанную в этой статье блога ,настройте новую область безопасности "app.realm" в консоли WLS и определите SQLAuthenticator внутри нее.

После перезапуска WLS я вижу свои определения пользователей и групп из базы данных в "app.realm" в веб-консоли WLS.Пользователь, которого я пытаюсь аутентифицировать, является членом группы WEBAPP_USER (членство в группе отображается на странице сведений о пользователе в консоли WLS).

При развертывании приложения (с использованием стандартных настроек никаких настроек ввеб-консоль WLS) и вызов защищенного URL, я перенаправлен в форму login.html, как и ожидалось.Однако, независимо от того, что я пытаюсь сделать, ввод (правильного) пароля всегда приводит к ошибке аутентификации и отправляет меня на страницу login_error.html.В целях отладки я включил пароли в виде простого текста в SQLAuthenticator, поэтому я уверен, что использовал правильные учетные данные.

Я уже видел эти два потока, но ни одна из них, похоже, не помогает с моей проблемой.

Обновление 1

Благодаря комментарию emzy я теперь вижу, что WLS проверяет учетные данные по стандартной области "myrealm" и пытается разрешить вход в систему.имя пользователя для встроенного LDAP:

...
####<20.04.2011 09:29 Uhr MESZ> <Debug> <SecurityAtn> <hostname> <AdminServer> <[ACTIVE] ExecuteThread: '6' for queue: 'weblogic.kernel.Default (self-tuning)'> <<WLS Kernel>> <> <> <1303284573150> <BEA-000000> <getDNForUser search("ou=people,ou=myrealm,dc=nvs_dev", "(&(uid=app.user)(objectclass=person))", base DN & below)>
####<20.04.2011 09:29 Uhr MESZ> <Debug> <SecurityAtn> <hostname> <AdminServer> <[ACTIVE] ExecuteThread: '6' for queue: 'weblogic.kernel.Default (self-tuning)'> <<WLS Kernel>> <> <> <1303284573150> <BEA-000000> <DN for user app.user: null>
####<20.04.2011 09:29 Uhr MESZ> <Debug> <SecurityAtn> <hostname> <AdminServer> <[ACTIVE] ExecuteThread: '6' for queue: 'weblogic.kernel.Default (self-tuning)'> <<WLS Kernel>> <> <> <1303284573150> <BEA-000000> <returnConnection conn:LDAPConnection { ldapVersion:2 bindDN:""}>
####<20.04.2011 09:29 Uhr MESZ> <Debug> <SecurityAtn> <hostname> <AdminServer> <[ACTIVE] ExecuteThread: '6' for queue: 'weblogic.kernel.Default (self-tuning)'> <<WLS Kernel>> <> <> <1303284573151> <BEA-000000> <javax.security.auth.login.FailedLoginException: [Security:090302]Authentication Failed: User app.user denied
        at weblogic.security.providers.authentication.LDAPAtnLoginModuleImpl.login(LDAPAtnLoginModuleImpl.java:229)
        at com.bea.common.security.internal.service.LoginModuleWrapper$1.run(LoginModuleWrapper.java:110)
        at java.security.AccessController.doPrivileged(Native Method)
        ...

Обновление 2

Теперь я выполнил эти шаги и включил аутентификацию:

  • Добавьте SQLAuthenticator вобласть по умолчанию «myrealm» в консоли WLS
  • Установите для DefaultAuthenticator Weblogic и новый SQLAuthenticator значение SUFFICIENT в соответствующих настройках провайдера («управляющий флаг JAAS», как они его называют)
  • Перезапустите WLS

Остается один вопрос:

Вопросы

  • Есть ли в WLS дополнительная регистрация, помимо стандартного журналафайлы в папке <domain>/server/AdminServer/logs, где я могупосмотрим, что произойдет?
  • Что я делаю не так / Какую часть головоломки мне не хватает, чтобы моя аутентификация на основе форм работала с моим приложением?
  • Почему WLS использует «myrealm» для аутентификации, когда я явно указываю «app.realm» в моем web.xml?

Вот мои данные конфигурации:

web.xml

...
<security-constraint>
  <web-resource-collection>
    <web-resource-name>Webapp Platform</web-resource-name>
    <url-pattern>/*</url-pattern>
  </web-resource-collection>
  <auth-constraint>
    <role-name>USER</role-name>
  </auth-constraint>
  <user-data-constraint>
    <transport-guarantee>NONE</transport-guarantee>
  </user-data-constraint>
</security-constraint>
<login-config>
  <auth-method>FORM</auth-method>
  <realm-name>app-realm</realm-name>
  <form-login-config>
    <form-login-page>/login.html</form-login-page>
    <form-error-page>/login_error.html</form-error-page>
  </form-login-config>
</login-config>
<security-role>
  <description>Standard user</description>
  <role-name>USER</role-name>
</security-role> 
...

weblogic.xml

<wls:weblogic-web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xmlns:wls="http://www.bea.com/ns/weblogic/weblogic-web-app"
  xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd http://www.bea.com/ns/weblogic/weblogic-web-app http://www.bea.com/ns/weblogic/weblogic-web-app.xsd">
  ...
  <security-role-assignment>
    <role-name>USER</role-name>
    <principal-name>WEBAPP_USER</principal-name>
  </security-role-assignment>
</wls:weblogic-web-app>

login.html

<html>
<head>
<title>Login</title>
</head>
<body>
<form method="POST" action="j_security_check">
<table>
<tr><td>Username:</td><td><input type="text" name="j_username"></td></tr>
<tr><td>Password:</td><td><input type="password" name="j_password"></td></tr>
<tr><td colspan=2 align=right><input type=submit value="Submit"></td></tr>
</table>
</form>
</body>
</html>

Ответы [ 2 ]

4 голосов
/ 04 мая 2012

это сложная концепция с областями аутентификации.Что касается вашего последнего открытого вопроса: - Почему WLS использует «myrealm» для аутентификации, когда я явно указываю «app.realm» в моем web.xml?

Вы можете настроить несколько областей безопасности в WebLogic, однако только ОДИНможет быть активным (в этом случае myrealm по умолчанию).Это одно из досадных ограничений. К сожалению, неактивные ограничения вообще не используются.Ссылка на неактивную область в web.xml не имеет никакого эффекта.

смотрите здесь http://docs.oracle.com/cd/E24329_01/web.1211/e24422/overview.htm#i1093279

3 голосов
/ 19 апреля 2011

На вкладке Сервер -> Отладка на консоли вы можете включить ведение журнала уровня отладки / трассировки. Я бы попытался включить все журналы, связанные с безопасностью, чтобы увидеть, показывает ли какие-либо предупреждения или исключения.

...