jsf - Wildfly 11 中的 FORM 身份验证回退
问题描述
我目前有一个有效的 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>
独立的.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>
登录.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
那么客户端将永远不会重新检索您的资源,并且您的表单不会踢它 b/c SPNEGO 已经踢了它。
我建议反对并Negotiate
与Basic
. 这是很少/更少的头痛。
推荐阅读
- powerbi - 我需要使用 dax 命令或其他 power bi 方法过滤表
- android - Android 10 以编程方式连接 wifi
- json - 使用 JSON 约束将大型 JSON 内容插入 Oracle 数据库
- python - 如果在过去 24 小时内未找到电子邮件,Python exchangelib 创建警报
- sql - SQL 中的记录展平
- docker - Docker 何时可以缓存对“RUN ln”的调用?
- python - 在python中接受多个输入
- node.js - 2k 并发连接后 Socket.io 挂起
- sql-server - OPENJSON - 如何从 SQL Server 中保存为 NVARCHAR 的 JSON 对象中提取值
- android - 如何将位图从第二个活动共享到第一个活动