我们从WAS迁移到JBoss EAP 6.4.0.GA(AS 7.5.0),我无法设置Active Directory来保护我们的Web应用程序。我的配置受http://middlewaremagic.com/jboss/?p=378的启发,但它不适用于7.5.0。
以下是 standalone.xml
中安全域的摘要<security-domain name="ad_security_domain" cache-type="default">
<authentication>
<login-module code="org.jboss.security.auth.spi.LdapExtLoginModule" flag="required">
<module-option name="java.naming.factory.initial" value="com.sun.jndi.ldap.LdapCtxFactory"/>
<module-option name="java.naming.provider.url" value="ldap://10.175.35.60:389"/>
<module-option name="bindDN" value="CN=AD Reader,OU=Users,OU=XXX Group,DC=ferradev,DC=fe"/>
<module-option name="bindCredential" value="secret"/>
<module-option name="baseCtxDN" value="OU=Users,OU=XXX Company,OU=XXX Group,DC=ferradev,DC=fe"/>
<module-option name="baseFilter" value="(sAMAccountName={0})"/>
<module-option name="rolesCtxDN" value="OU=Groups,OU=XXX Company,OU=XXX Group,DC=ferradev,DC=fe"/>
<module-option name="roleFilter" value="(member={1})"/>
<module-option name="roleAttributeID" value="memberOf"/>
<module-option name="roleAttributeIsDN" value="true"/>
<module-option name="roleNameAttributeID" value="cn"/>
<module-option name="allowEmptyPasswords" value="false"/>
<module-option name="Context.REFERRAL" value="follow"/>
<module-option name="throwValidateError" value="true"/>
<module-option name="searchScope" value="SUBTREE_SCOPE"/>
</login-module>
<login-module code="org.jboss.security.auth.spi.RoleMappingLoginModule" flag="optional">
<module-option name="rolesProperties" value="${jboss.server.config.dir}/fop-roles.properties"/>
</login-module>
</authentication>
</security-domain>
我的 jboss-web.xml
中包含此代码<?xml version="1.0"?>
<jboss-web>
<security-domain>ad_security_domain</security-domain>
</jboss-web>
在config目录(standalone.xml所在的位置)中,我有属性文件 fop-roles.properties
APP_GG_FOP_DEV_ADMINS=Administrators
以下是 web.xml
的摘要<security-constraint>
<web-resource-collection>
<web-resource-name>Admin Resources</web-resource-name>
<url-pattern>/configuration/*</url-pattern>
</web-resource-collection>
<auth-constraint>
<role-name>Administrators</role-name>
</auth-constraint>
<user-data-constraint>
<transport-guarantee>NONE</transport-guarantee>
</user-data-constraint>
</security-constraint>
....
<security-role>
<description>Administrators Role</description>
<role-name>Administrators</role-name>
</security-role>
Bellow是我们的Active Directory结构的屏幕截图:
成功将web应用程序部署到JBoss之后,会显示登录页面,但在填写凭据后,我总是收到错误:
TRACE [org.jboss.security](ServerService线程池 - 100)PBOX000354:设置安全角色ThreadLocal:null
答案 0 :(得分:4)
我最近花了很多时间用Active Directory配置LDAP。我发现测试的一个好方法是安装Apache Directory Server并将其用于本地调试。
<security-domain name="LdapSecurityDomain" cache-type="default">
<authentication>
<login-module code="org.jboss.security.auth.spi.LdapExtLoginModule" flag="required">
<module-option name="password-stacking" value="useFirstPass"/>
<module-option name="java.naming.factory.initial" value="com.sun.jndi.ldap.LdapCtxFactory"/>
<module-option name="java.naming.provider.url" value="ldap://your.ldap.host:389/"/>
<module-option name="java.naming.security.authentication" value="simple"/>
<module-option name="bindDN" value="uid=BindUser,OU=Users,DC=yourCompany,DC=biz"/>
<module-option name="bindCredential" value="theBindUserPassword"/>
<module-option name="baseCtxDN" value="OU=Users,DC=yourCompany,DC=biz"/>
<module-option name="baseFilter" value="(uid={0})"/>
<module-option name="roleFilter" value="(member={1})"/>
<module-option name="rolesCtxDN" value="OU=RoleGroups,DC=yourCompany,DC=biz"/>
<module-option name="roleAttributeID" value="cn"/>
<module-option name="roleNameAttributeID" value="cn"/>
<module-option name="roleRecursion" value="0"/>
<module-option name="throwValidateError" value="true"/>
<module-option name="java.naming.referral" value="follow"/>
<module-option name="searchScope" value="SUBTREE_SCOPE"/>
<module-option name="unauthenticatedIdentity" value="unauthenticated"/>
<module-option name="allowEmptyPasswords" value="false"/>
</login-module>
</authentication>
答案 1 :(得分:2)
RoleMappingLoginModule
在JBoss AS7 +(EAP 6+)中无法正常工作。它可能会导致您的方案中出现问题。
使用(选项1)password stacking和UsersRoles
登录模块或(选项2)直接使用角色映射功能。
选项1:
<security-domain name="ad_security_domain" cache-type="default">
<authentication>
<login-module code="org.jboss.security.auth.spi.LdapExtLoginModule" flag="required">
<!-- Put your original module options for LDAP here and add following: -->
<module-option name="password-stacking" value="useFirstPass" />
</login-module>
<login-module code="UsersRoles" flag="optional">
<module-option name="password-stacking" value="useFirstPass" />
<module-option name="rolesProperties" value="${jboss.server.config.dir}/fop-roles.properties" />
</login-module>
</authentication>
</security-domain>
选项2:
<security-domain name="ad_security_domain" cache-type="default">
<authentication>
<login-module code="org.jboss.security.auth.spi.LdapExtLoginModule" flag="required">
<!-- Put your original module options for LDAP here -->
</login-module>
</authentication>
<mapping>
<mapping-module code="PropertiesRoles" type="role">
<module-option name="rolesProperties" value="${jboss.server.config.dir}/fop-roles.properties" />
</mapping-module>
</mapping>
</security-domain>
答案 2 :(得分:2)
您的web.xml中的角色约束表示管理员,但您可以从roleCtxDn OU = Groups,OU = XXX Company,OU = XXX Group,DC = ferradev,DC = fe的不同角色是APP_GG_FOR_DEV_ADMINS,APP_GG_FOR_DEV_MANAGERS,APP_GG_FOR_DEV_USERS和APP_GG_FOR_DEV_WS_ADMINS。
还可以使用https://developer.jboss.org/wiki/SecurityFAQ中描述的所有TRACE日志记录选项来帮助您解决问题。