Apache CXF:访问受Kerberos保护的网站和“普通”网站

时间:2019-08-09 06:47:34

标签: cxf kerberos jaas

我正在使用Apache CXF访问ReST Web服务。因为我是JAAS和Kerberos的新手,所以我从CXF tutorial example开始,经过一些调试和配置,它起了很大的作用。我的程序几乎类似于示例中的程序。

public void doStuff(String uri, String jaasEntryName) {
    System.setProperty("java.security.krb5.conf", "c:\Temp\krb5.conf");
    System.setProperty("java.security.auth.login.config", "c:\Temp\jaas-login.conf");

    WebClient wc = WebClient.create(uri);
    KerberosAuthOutInterceptor kbInterceptor = new KerberosAuthOutInterceptor();

    AuthorizationPolicy policy = new AuthorizationPolicy();
    policy.setAuthorizationType(HttpAuthHeader.AUTH_TYPE_NEGOTIATE);
    policy.setAuthorization(jaasEntryName);

    kbInterceptor.setPolicy(policy);
    WebClient.getConfig(wc).getOutInterceptors().add(kbInterceptor);
    Response response = wc.get();
    // handle response ...
}

到目前为止,很好,现在,我不仅要访问受Kerberos保护的服务器上的Web服务,而且要访问完全不受保护的服务器上的Web服务。如果我使用此类url照原样调用方法,则会收到异常Caused by: Krb5Exception: Identifier doesn't match expected value (906)

是否可以使用上面的方法访问受Kerberos保护的资源和不受Kerberos保护的网站?

当我使用KerberosAuthOutInterceptor时,我猜想CXF要使用Kerberos,我正在寻找一种配置CXF的方法,尽管使用了拦截器,但它不应该这样做(即,如果我配置jaas-login。正确配置)。 我的可悲的尝试使其生效:

  • 我编辑了jaas-login.conf并添加了一个带有可选Krb5Module的条目,希望它不会选择性地执行Kerberos

    optional-kerberos { com.sun.security.auth.module.Krb5LoginModule optional; }

  • 我创建了javax.security.auth.spi.LoginModule的实现,该实现只返回true

    public class NoAuthenticationLoginModule { public void initialize(Subject s, CallbackHandler c, Map m, Map o) {/*do nothing*/} public boolean login() {return true;} public boolean commit() {return true;} public boolean about() {return true;} public boolean logout() {return true;} }

我的想法都不起作用。有谁有更好的一个?

0 个答案:

没有答案