JBoss Wildfly-基于LDAP的Web应用程序身份验证



我在jboss-web.xml中定义了一个安全域,如下所示

<jboss-web>
    <security-domain>java:/jaas/my_ldap_security_domain</security-domain>
    <disable-audit>true</disable-audit>
</jboss-web>

我还在我的standalone.xml 中定义了

<subsystem xmlns="urn:jboss:domain:security:1.2">
    <security-domains>
        <security-domain name="my_ldap_security_domain" cache-type="default">
            <authentication>
                <login-module code="LdapExtended" flag="sufficient">
                    <module-option name="java.naming.factory.initial" value="com.sun.jndi.ldap.LdapCtxFactory"/>
                    <module-option name="java.naming.provider.url" value="ldaps://xxx.xxx.xxx.xxx:yyyy"/>
                    <module-option name="java.naming.security.authentication" value="simple"/>
                    <module-option name="bindDN" value="temp@my.domain"/>
                    <module-option name="bindCredential" value="mypass"/>
                    <module-option name="baseCtxDN" value="DC=my,DC=domain"/>
                    <module-option name="baseFilter" value="(uid={0})"/>
                    <module-option name="rolesCtxDN" value="DC=my,DC=domain"/>
                    <module-option name="roleFilter" value="(uniquemember={1})"/>
                    <module-option name="roleAttributeID" value="cn"/>
                    <module-option name="searchScope" value="SUBTREE_SCOPE"/>
                    <module-option name="roleRecursion" value="0"/>
                    <module-option name="allowEmptyPasswords" value="true"/>
                </login-module>
            </authentication>
        </security-domain>
    </security-domains>
</subsystem>

我的standalone.xml上唯一的领域是

<security-realms>
    <security-realm name="ManagementRealm">
        <authentication>
            <local default-user="$local" skip-group-loading="true"/>
            <properties path="mgmt-users.properties" relative-to="jboss.server.config.dir"/>
        </authentication>
        <authorization map-groups-to-roles="false">
            <properties path="mgmt-groups.properties" relative-to="jboss.server.config.dir"/>
        </authorization>
    </security-realm>
    <security-realm name="ApplicationRealm">
        <authentication>
            <local default-user="$local" allowed-users="*" skip-group-loading="true"/>
            <properties path="application-users.properties" relative-to="jboss.server.config.dir"/>
        </authentication>
        <authorization>
            <properties path="application-roles.properties" relative-to="jboss.server.config.dir"/>
        </authorization>
    </security-realm>
</security-realms>

我之前没有提到它,因为我认为这个安全领域旨在验证应用程序服务器控制台访问。抱歉。

我的疑问是如何创建一个jsf2登录页面来根据上面定义的内容进行身份验证。我读了很多关于的文章,但仍然停留在同一个地方,因为大多数文章都使用假身份验证作为示例(与静态字符串进行比较,而不是显示如何咨询LDAP服务器)。

有人能帮我吗?

我推测这个安全领域是为了验证应用服务器控制台访问

你有一部分是正确的。name="ManagementRealm"确实指定了用于访问管理函数的领域配置。name="ApplicationRealm"将是为保护web应用程序而指定的属性

您当前的领域配置缺少LDAP身份验证所需的一些内容。我想你已经熟悉web.xml中的登录表单配置了。你的领域配置应该如下所示,摘自Wildfly 8 realm配置手册:

<management>
  <security-realms>
    <security-realm name="ApplicationRealm">
      <authentication>
        <ldap connection="EC2" base-dn="CN=Users,DC=darranl,DC=jboss,DC=org">
          <username-filter attribute="sAMAccountName" />
        </ldap>
      </authentication>
    </security-realm>
 
  </security-realms>
</management>

其中<ldap>标记指定您的查找是针对LDAP服务器的。除此之外,您只需要遵循JavaEE应用程序的标准身份验证方法。

由此得出的结论应该是,JavaEE中的web应用程序安全性通常采用与相同的方法

  1. 设置领域(特定于应用程序服务器)
  2. 在web.xml中设置安全约束(在所有JavaEE应用程序中统一)
  3. 实现登录方法(配置或编程)

相关

  • Java EE 6编程安全、glassfish和JDBC领域
  • 登录后如何正确注销Java EE 6 Web应用程序
  • 使用j_security_check在Java EE/JSF中执行用户身份验证

最新更新