2009-09-24 114 views
4

我正在使用Java编写的服务器和在同一网络上的Windows计算机上运行的客户端(使用.Net编写的桌面应用程序)。我想要进行一些基本的身份验证,以便服务器可以确定运行客户端的用户的用户名,而不需要用户在客户端重新输入他们的Windows密码。在Java服务器中对Windows用户进行身份验证

这是可能的,什么是最简单的方法来实现它?

我看了一些可用的API,看起来好像Java中的org.ietf.jgss包和.Net中的NegotiateStream类应该可以相互交谈来实现这一点 - 但我不断打击令人沮丧的错误消息,我不明白。我想我会检查这是否是正确的方法,如果是这样我会发布一个单独的问题与关于错误的更多细节问题:)

+0

你可以添加一些关于他们如何沟通的细节? HTTP? RMI? JMS?插座? – Nathan 2009-09-24 21:59:25

+0

“真实的东西”是SOAP。话虽如此,但构建和运行完整的应用程序需要一段时间,所以到目前为止,我的测试都使用了一个基于小型原始套接字的服务器 - 这样我就可以在几秒钟内完成更改并重新运行它。如果我可以得到这个工作,延伸到真正的应用程序应该是相对简单的(我希望!) – 2009-09-24 22:36:46

回答

3

该方法是正确的。注意一些事情,虽然:

  • 这将对无关“基本身份验证”(在HTTP)
  • .NET会尝试使用SPNEGO GSS机制。请参阅Sun documentation以获得对此机制的正确支持。
  • 您的服务需要体现服务主体。因此,您不仅需要为用户创建Active Directory帐户,还需要为该服务创建一个Active Directory帐户,并且需要将该服务的密码放入Java密钥表中。
+0

谢谢。当我说“基本认证”时,我想我选择了一个不幸的短语 - 没有意识到它具有特定的含义。我只是想说我不想做任何复杂的事情。 – 2009-09-24 22:54:45

+0

@卢克:我在猜测那么多。请注意,使用GSS-API和Kerberos非常复杂,正如任何其他单登录机制一样。 – 2009-09-24 23:00:30

+0

我发布了一个后续更详细的信息,如果你知道这个东西,我会很感激你的眼睛! :) http://stackoverflow.com/questions/1499267/how-to-get-negotiatestream-to-use-kerberos – 2009-09-30 17:11:48

0

不熟悉GSS机制。我会建议在无密码的ssh中使用共享密钥机制。

0

这个开源库http://spnego.sourceforge.net正是你在找什么。它在服务器上实现HTTP Servlet过滤器,以便您的Web应用程序可以调用request.getRemoteUser()来查找用户名。

相关问题