Kerberos 客户端 - kerberoRestTemplate 不工作

Kerberos client - kerberoRestTemplate not working

我正在尝试使用使用 Kerberos 进行身份验证的 api。我参考了以下与 KerberosRestTemplate 相关的 spring 文档。reference link,我传递了正确的密钥表文件和参考文档中提到的 userPrincipal 值。但我仍然从服务器收到 401。 但是,当我在终端中执行 kinit 命令时,它会收到来自 KDC 的票据,因此我能够执行 curl 命令并获得工作响应。

        KerberosRestTemplate kerberosRestTemplate = new KerberosRestTemplate("svc_dfsd.keytab", "svc_dfsd@sswe.AD");
        String url="https://wexample.com:20550/aggr_subscriber_summary_hbase/03434809824";
        HttpHeaders headers = new HttpHeaders();
        headers.setAccept(Arrays.asList(MediaType.TEXT_XML));
        HttpEntity<String> entity = new HttpEntity<String>("parameters", headers);

        ResponseEntity<String> response = kerberosRestTemplate.exchange(url, HttpMethod.GET, entity, String.class);

您能否建议任何其他更好的方法来执行此操作或修复此问题。非常感谢您的所有评论!!!

Kerberos 故障排除可能很棘手,因为错误通常具有误导性,并且 Java 如果隐式操作(URL 规范化等),实施会做很多事情。

我建议尝试 Kerb4J 允许您显式生成 kerberos 令牌的库:

SpnegoClient spnegoClient = SpnegoClient.loginWithKeyTab("svc_dfsd@sswe.AD", "svc_dfsd.keytab");
SpnegoContext context = spnegoClient.createContext("https://wexample.com"); // Will result in HTTP/wexample.com SPN

RestTemplate restTemplate = new RestTemplate();
String url="https://wexample.com:20550/aggr_subscriber_summary_hbase/03434809824";
HttpHeaders headers = new HttpHeaders();
headers.setAccept(Arrays.asList(MediaType.TEXT_XML));
headers.add("Authorization", context.createTokenAsAuthroizationHeader());
HttpEntity<String> entity = new HttpEntity<String>("parameters", headers);

ResponseEntity<String> response = restTemplate .exchange(url, HttpMethod.GET, entity, String.class);

如果默认 SPN 解析适合您,您也可以使用此 Kerb4J 中的 SpnegoRestTemplate

SpnegoClient spnegoClient = SpnegoClient.loginWithKeyTab("svc_dfsd@sswe.AD", "svc_dfsd.keytab");

SpnegoRestTemplate spnegoRestTemplate = new SpnegoRestTemplate(spnegoClient);
String url="https://wexample.com:20550/aggr_subscriber_summary_hbase/03434809824";
HttpHeaders headers = new HttpHeaders();
headers.setAccept(Arrays.asList(MediaType.TEXT_XML));
HttpEntity<String> entity = new HttpEntity<String>("parameters", headers);

ResponseEntity<String> response = spnegoRestTemplate.exchange(url, HttpMethod.GET, entity, String.class);

免责声明:我是 Kerb4J 的作者