我们正在使用Weblogic Server 10.3.4运行我们的webapp,该webapp已启用安全约束,以便要求用户在他/她可以使用该应用程序之前登录。用户和组信息应驻留在应用程序数据库中,认证应由WLS(容器)处理。
我已将数据库架构设置为described in this blog article,在WLS控制台中设置了一个新的Security Realm“app.realm”,并在其中定义了SQLAuthenticator
。
重新启动WLS后,我可以在WLS Web控制台的“app.realm”中看到数据库中的用户和组定义。我尝试进行身份验证的用户是WEBAPP_USER
组的成员(我在WLS控制台中看到用户详细信息页面上的组成员身份)。
当我部署应用程序(使用标准设置,WLS Web控制台中没有调整)并调用受保护的URL时,我会按预期重定向到login.html
表单。但是,无论我尝试什么,输入(右)密码总会导致身份验证失败,将我发送到login_error.html
页面。出于调试目的,我在SQLAuthenticator
中启用了纯文本密码,因此我非常确定使用了正确的凭据。
我已经看过these two个帖子,但似乎都没有帮助解决我的问题。
感谢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)
...
我现在执行了这些步骤并使身份验证正常工作:
SQLAuthenticator
添加到WLS控制台中的默认领域“myrealm”DefaultAuthenticator
和新SQLAuthenticator
设置为相应提供商设置中的SUFFICIENT
(“JAAS控制标志”,如何调用它)但仍然存在一个问题:
<domain>/server/AdminServer/logs
文件夹中的标准日志文件外,WLS是否还有一些额外的日志记录,我可以看到会发生什么?web.xml
明确提供“app.realm”时,为什么WLS会使用“myrealm”进行身份验证? 以下是我的配置详情:
...
<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>
...
<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>
<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>
答案 0 :(得分:4)
您可以在WebLogic中配置多个安全领域,但只有一个可以处于活动状态(在本例中为默认的myrealm)。这是一个令人讨厌的限制,不幸的是 根本不使用不活动的。在web.xml中引用非活动领域无效。
看这里http://docs.oracle.com/cd/E24329_01/web.1211/e24422/overview.htm#i1093279
答案 1 :(得分:3)
在服务器下 - &gt;控制台上的Debug选项卡,可以启用调试/跟踪级别日志记录。我会尝试启用所有与安全性相关的日志,以查看是否显示任何警告或异常。