从运行在Linux上的Java中识别KERBEROS的http请求

从运行在Linux上的Java中识别KERBEROS的http请求

问题描述:

我在Linux和Windows服务器上都有一些环境。身份验证由Kerberos处理。我想制作一些JAVA代码,它可以自动验证由登录用户执行程序所完成的http请求。从运行在Linux上的Java中识别KERBEROS的http请求

举例来说,如果我有这样的代码:

CloseableHttpClient winHttpclient = WinHttpClients.createDefault(); 

HttpGet httpget = new HttpGet("http://mykerberos/endpoint"); 

winHttpclient.execute(httpget).getEntity(); 

,当我从窗口执行它,它的作品开箱。我被http://mykerberos/endpoint识别并得到回应。

现在,我想从一台Linux服务器上做同样的事情。 我发现了几个提案,如https://docs.oracle.com/javase/8/docs/technotes/guides/security/jgss/lab/part6.html#Proxy_Authentication,但它不是我所期望的,因为它需要我的凭据:从Windows,我甚至不必通过它们。

有人知道我可以做到这一点吗?

在此先感谢您的帮助!

+0

您的Windows凭据是(我猜)由Active Directory服务器授予的Kerberos票据; Web服务器也是(我猜)使用AD进行身份验证,这就是SPNego协议的用途。但是你的Linux凭据是什么?您是否在本地Linux帐户或针对您在Windows中使用的同一个AD帐户登录(通过SSSD或Centrify完成绑定)? –

+0

嗨,谢谢你的回复。您是对的,当我们登录到Windows时,我们得到一张Kerberos票据,并且是的,Web服务器正在使用我们的AD服务器进行身份验证。身份验证使用SPNego协议完成。我们在Linux上使用相同的帐户。我不知道使用哪种工具将它们绑定到我们的AD。我检查了当我登录Linux主机时,_klist_给我返回一张票。 –

+0

如果您的Kerberos票证缓存中有有效的TGT,则任何体面的HTTP客户端(即支持SPNego的应用程序)都应该能够连接。包括'curl'命令行实用程序与'--negotiate -u:' –

以下https://docs.oracle.com/javase/8/docs/technotes/guides/security/jgss/lab/part6.html使用正确版本的Java(适用于Java 8,但不适用于Java 6)时工作正常。