我正在使用jboss eap 6.4和java 1.7。 我正在构建一个jee应用程序,现在我正在尝试使用公司ldap验证(并授权)用户。
我在jboss中创建了以下安全域:
<security-domain name="abcDomain" cache-type="default">
<authentication>
<login-module code="Ldap" flag="required">
<module-option name="java.naming.factory.initial" value="com.sun.jndi.ldap.LdapCtxFactory"/>
<module-option name="java.naming.provider.url" value="ldap://abc.com.uy:389"/>
<module-option name="java.naming.security.authentication" value="simple"/>
<module-option name="principalDNPrefix" value="uid="/>
<module-option name="principalDNSuffix" value=",ou=Interns,dc=abc,dc=com,dc=uy"/>
<module-option name="searchTimeLimit" value="5000"/>
<module-option name="roleAttributeID" value="cn"/>
<module-option name="rolesCtxDN" value="ou=Groups,ou=Admin,dc=abc,dc=com,dc=uy"/>
<module-option name="uidAttributeID" value="member"/>
<module-option name="matchOnUserDN" value="true"/>
<module-option name="roleAttributeIsDN" value="false"/>
</login-module>
</authentication>
</security-domain>
我在我的应用程序中使用它来保护一些网页,web.xml中的安全性约束如下:
<security-constraint>
<web-resource-collection>
<web-resource-name>pages</web-resource-name>
<description>Security constraint for pages</description>
<url-pattern>/pages/*</url-pattern>
<http-method>POST</http-method>
<http-method>GET</http-method>
</web-resource-collection>
<auth-constraint>
<role-name>SCC-ADMIN</role-name>
<role-name>SCC-RESPONSABLE</role-name>
<role-name>SCC-CONSULTA</role-name>
</auth-constraint>
</security-constraint>
身份验证部分正在运行。这意味着,如果我输入错误的密码或用户,我会收到错误,但如果一切正确,我会继续请求的页面(返回403错误)。 当用户和密码正确时,我尝试使用以下代码获取用户角色:
@ManagedBean
@SessionScoped
public class SesionController implements Serializable {
.
.
.
@PostConstruct
public void initSesionController() {
usuario = FacesContext.getCurrentInstance().getExternalContext().getRemoteUser();
sccAdmin = FacesContext.getCurrentInstance().getExternalContext().isUserInRole("SCC-ADMIN");
.
.
.
“usuario”是正确的。但这个角色是错误的。此外,我收到403 http错误,因为角色不是“被分配”,这似乎是合乎逻辑的。
我的ldap这个组: 的 CN = SCC-ADMIN,OU =组,OU =管理员,DC = ABC,DC = COM,DC = UY 我正在测试的这个用户确实是 uid = aviera,ou =实习生,dc = abc,dc = com,dc = uy
的成员我的猜测是安全域中的 rolesCtxDN 定义是错误的,但我没有运气试图修复它(我没有使用ldap的经验,所以我可能犯了一个明显的错误)。
答案 0 :(得分:0)
我下载了一个名为 jxplorer 的工具来查看ldap结构。我注意到在SCC-ADMIN组中存储在名为 uniqueMember 的属性中的成员,而不是 uidAttributeID 中指示的成员安全域的属性。所以改变这解决了我的问题。