Elytron 的 application-http-authentication 用于哪些 URL?
结论:这处引用用于 /wildfly-services 下的远程调用
按照给出的配置,Undertow 的 http-invoker 引用了 application-http-authentication,用于通过 HTTP 进行远程 EJB、JNDI 等服务调用。http-invoker 没有设置 path 时,默认路径为 wildfly-services,因此客户端使用的基础 URL 是:
http://localhost:8080/wildfly-services
如果 HTTPS 监听器也连接到同一 Undertow server,且请求路由到该虚拟主机,可以使用:
https://<myhostname>:8443/wildfly-services
这两个地址是服务调用的入口。要进行实际认证,需要使用相应客户端发起符合协议的服务请求。WildFly 的 http-invoker 模型文档说明了该服务的用途、默认路径和认证工厂属性。
为什么 /wildfly-widgets/inventory 仍然能访问?
原配置中决定认证范围的是这处引用:
<http-invoker http-authentication-factory="application-http-authentication"/>
它让 http-invoker 使用这个认证工厂,并不会为该虚拟主机上的所有 Web 应用设置认证。
application-http-authentication 是资源名称,名称本身不表示它绑定了某组 URL。即使名称带有 application,也需要其他配置显式引用它,才能让它参与相应请求的认证。
因此,/wildfly-widgets/inventory 是否使用这个工厂,要看应用的认证配置。Web 部署通常通过 Undertow 的 application-security-domain 映射关联 Elytron;映射可以引用 security-domain,也可以引用 http-authentication-factory。直接使用同一个 ApplicationDomain,不代表一定经过这个认证工厂。WildFly 的 application-security-domain 文档列出了这些配置属性。
根据现有片段,只能确定 http-invoker 引用了该工厂,无法确定 wildfly-widgets 的完整认证链路。访问成功也不能单独证明请求执行了哪一种认证。
应该怎样使用这个 URL?
在支持 WildFly HTTP transport 的远程 EJB 或 JNDI 客户端中配置这个地址。例如,使用相应 JNDI 客户端时,provider URL 可以这样配置:
properties.put(
javax.naming.Context.PROVIDER_URL,
"http://localhost:8080/wildfly-services"
);
这只是地址配置示例。完整调用还需要匹配的客户端依赖、认证信息,以及实际存在的远程服务。
注意区分下面两个 URI:
remote+http://localhost:8080
http://localhost:8080/wildfly-services
前者使用 Remoting transport,后者使用这里讨论的 HTTP invoker transport。WildFly 的 EJB over HTTP 文档说明了这一配置区别。
直接在浏览器中打开 /wildfly-services,不能可靠地验证认证工厂是否工作。浏览器的普通 GET 请求没有执行完整的远程调用协议,因此不能要求它一定显示登录框或返回业务页面。
如何检查实际生效的配置?
先在 WildFly 管理 CLI 中读取 invoker 配置,并包含默认值:
/subsystem=undertow/server=default-server/host=default-host/setting=http-invoker:read-resource(include-defaults=true)
检查 http-authentication-factory 是否为 application-http-authentication,以及 path 是否为 wildfly-services,或已被改成其他值。
再检查 Web 应用使用的安全域映射:
/subsystem=undertow:read-children-resources(child-type=application-security-domain,include-runtime=true)
结合应用的 WEB-INF/jboss-web.xml、WEB-INF/web.xml 以及实际使用的安全框架,确认 /wildfly-widgets/inventory 的认证方式。可以从配置中的 default-security-domain="other" 开始检查,但应用可能显式指定了其他映射。
如果删除认证工厂后仍保留 <http-invoker> 对它的引用,还应检查管理操作结果、启动日志和 reload 状态。被引用的资源缺失可能导致操作失败或相关服务无法启动;“某个应用页面仍可访问”不足以证明整份修改后的配置已正常生效。
备注:内容仅供参考。
