jsf - Wildfly 11 中的 FORM 身份验证回退

标签 jsf active-directory wildfly spnego

我目前有一个可用的 SPNEGO 配置,可以使用 kerberos 票证登录。现在我想使用 j_security_check 回退到基于 FORM 的身份验证,并针对 AD/LDAP 验证用户名/密码。

如果我设置<auth-method>SPNEGO,FORM</auth-method>我被重定向到登录页面。现在我不知道如何从这里继续? 我的登录表单是否需要一个 bean,或者值是否会自动传递到服务器? Standalone.xml 中需要什么配置?

非常感谢任何帮助。使用 Wildfly 11。

我当前的配置:

web.xml

 <security-constraint>
    <display-name>Security Constraint on Conversation</display-name>
    <web-resource-collection>
      <web-resource-name>MyApp</web-resource-name>
      <url-pattern>/*</url-pattern>
    </web-resource-collection>
    <auth-constraint>
      <role-name>*</role-name>
    </auth-constraint>
  </security-constraint>

  <login-config>
    <auth-method>SPNEGO</auth-method>
    <realm-name>SPNEGO</realm-name>
  </login-config>

  <security-role>
    <description>Role required to log in to the Application</description>
    <role-name>*</role-name>
  </security-role>

jboss-web.xml

<jboss-web version="8.0" xmlns="http://www.jboss.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.jboss.com/xml/ns/javaee http://www.jboss.org/schema/jbossas/jboss-web_8_0.xsd">
  <context-root>/MyApp</context-root>
  <default-encoding>UTF-8</default-encoding>
 <security-domain>SPNEGO</security-domain>
  <jacc-star-role-allow>true</jacc-star-role-allow>
</jboss-web>

standalone.xml

<security-domain name="SPNEGO" cache-type="default">
                    <authentication>
                        <login-module code="SPNEGO" flag="required">
                            <module-option name="serverSecurityDomain" value="host"/>
                        </login-module>
                    </authentication>
                </security-domain>
                <security-domain name="host" cache-type="default">
                    <authentication>
                        <login-module code="Kerberos" flag="required" module="org.jboss.security.negotiation">
                            <module-option name="refreshKrb5Config" value="true"/>
                            <module-option name="doNotPrompt" value="true"/>
                            <module-option name="useKeyTab" value="true"/>
                            <module-option name="keyTab" value="${jboss.server.config.dir}/wildfly.keytab"/>
                            <module-option name="storeKey" value="true"/>
                            <module-option name="principal" value="HTTP/me.example.com@EXAMPLE.COM"/>
                            <module-option name="debug" value="true"/>
                        </login-module>
                    </authentication>
                </security-domain>

login.xhtml

 <form method="post" action="j_security_check">
            <h:form prependId="false" >
                <h:outputText value="Username"/>
                <p:password id="j_username" value="#{login.username}" />
                <p/>
                <h:outputText value="Passwort"/>
                <p:password id="j_password" value="#{login.password}" />
                <p/>
                <p:commandButton ajax="false" value="Login" action="#{login.login()}" />
            </h:form>
        </form>

最佳答案

还没有看到任何 WildFly 代码,但这对于 CMS(容器管理安全性)来说是不可能的。元素 auth-method 是单数,而不是复数。

您必须执行支持 SPNEGO 的混合身份验证,然后退回到表单例份验证。但这会非常棘手,因为你怎么知道客户端没有提供 SPNEGO 票证?您必须为此维护每个连接状态并重定向到表单。如果您预先发送带有 WWW-Authenticate: Negotiate 的表单,那么客户端将永远不会重新检索您的资源,并且您的表单不会踢它,因为 SPNEGO 已踢它。

我建议不要将 NegotiateBasic 结合起来。这有点/不太令人头痛。

关于jsf - Wildfly 11 中的 FORM 身份验证回退,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57324411/

相关文章:

jsf - 有条件地渲染 <ui :include>

jsf - javax.faces.view.facelets.FaceletException : Error Parsing/my. xhtml:错误跟踪 [行:42] 元素 "f"的前缀 "f:facet"未绑定(bind)

java - 将 'password expiration' 信息从 Wildfly 服务器身份验证模块传递到远程 EJB 客户端

jsf - 如何使用 PrimeFaces p :fileUpload? 从未调用监听器方法或 UploadedFile 为空/引发错误/不可用

jsf - p :poll not starting immediately

c# - 如何使用 C# .NET 跨域设置/更改 Active Directory 用户密码?

Java ldap 身份验证问题

java - 使用 Java 和 LDAP 将用户添加到 AD LDS (ADAM)

mysql - 带 SSL 的 Wildfly mysql

java - 如何在 JBoss "Wildfly"中的 2 个 EAR 之间共享 JPA 数据模型