【发布时间】:2017-01-22 11:10:30
【问题描述】:
我在 Red Hat JBoss Fuse(在 Fabric 中)内的 CXF 中实现了 SOAP/REST 服务。 我需要使用基本身份验证来保护它,并且必须在 LDAP 服务器上检查凭据。
这可以在没有自定义拦截器的情况下完成吗?
我是否可以使用容器 JAAS 安全性(使用 LDAP 配置)来保护服务,就像保护控制台一样?
【问题讨论】:
标签: cxf basic-authentication jbossfuse
我在 Red Hat JBoss Fuse(在 Fabric 中)内的 CXF 中实现了 SOAP/REST 服务。 我需要使用基本身份验证来保护它,并且必须在 LDAP 服务器上检查凭据。
这可以在没有自定义拦截器的情况下完成吗?
我是否可以使用容器 JAAS 安全性(使用 LDAP 配置)来保护服务,就像保护控制台一样?
【问题讨论】:
标签: cxf basic-authentication jbossfuse
是的,容器 JAAS 安全领域可用于保护 Web 服务。 一个例子是here。 示例页面没有解释实现,但快速查看 blueprint.xml 文件会发现以下配置:
<jaxrs:server id="customerService" address="/securecrm">
<jaxrs:serviceBeans>
<ref component-id="customerSvc"/>
</jaxrs:serviceBeans>
<jaxrs:providers>
<ref component-id="authenticationFilter"/>
</jaxrs:providers>
</jaxrs:server>
<bean id="authenticationFilter" class="org.apache.cxf.jaxrs.security.JAASAuthenticationFilter">
<!-- Name of the JAAS Context -->
<property name="contextName" value="karaf"/>
</bean>
因此,只需配置一个 JAAS 身份验证过滤器即可。 “karaf”是容器的默认 JAAS 领域:用户在 etc/users.properties 中定义 要定义更多领域,信息是here。 要在 LDAP 上拥有用户,请参阅 here。
【讨论】:
上面的答案是正确的,但请注意,对于更新版本的 Fuse(过去 6.1),LDAP 配置中的“等级”必须大于 100 才能覆盖默认的 karaf 领域。
此外,在应用当前补丁的情况下,在 Fuse 6.2.X 中,可以启用 LDAP 连接的连接池:
<!-- LDAP connection pooling -->
<!-- http://docs.oracle.com/javase/jndi/tutorial/ldap/connect/pool.html -->
<!-- http://docs.oracle.com/javase/jndi/tutorial/ldap/connect/config.html -->
context.com.sun.jndi.ldap.connect.pool=true
</jaas:module>
</jaas:config>
这对于大容量网络服务非常重要。为 LDAP 服务器维护一个连接池。这既避免了连接创建开销,又避免了关闭套接字在 TIME-WAIT 状态下徘徊。
【讨论】: