【问题标题】:Protect CXF Service in Fuse with Basic Authentication on LDAP Users使用 LDAP 用户的基本身份验证保护 CXF 服务
【发布时间】:2017-01-22 11:10:30
【问题描述】:

我在 Red Hat JBoss Fuse(在 Fabric 中)内的 CXF 中实现了 SOAP/REST 服务。 我需要使用基本身份验证来保护它,并且必须在 LDAP 服务器上检查凭据。

这可以在没有自定义拦截器的情况下完成吗?

我是否可以使用容器 JAAS 安全性(使用 LDAP 配置)来保护服务,就像保护控制台一样?

【问题讨论】:

    标签: cxf basic-authentication jbossfuse


    【解决方案1】:

    是的,容器 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

    【讨论】:

      【解决方案2】:

      上面的答案是正确的,但请注意,对于更新版本的 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 状态下徘徊。

      【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-01-14
      • 2018-11-30
      • 1970-01-01
      • 2021-09-24
      • 2019-03-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多