如何让NegotiateStream使用Kerberos?

在提出这个问题之后,我一直在尝试使用NegotiateStream来针对Java服务器验证Windows客户端。似乎Java没有很好的NTLM库支持,所以我一直在假设我必须使用Kerberos,Java似乎支持得更好(通过GSS-API)。 问题是NegotiateStream似乎每次都试图使用NTLM。文档建议它可以使用,但不指定它的选择方式。我在API中看不到任何选项来控制它选择的机制。有办法吗? 我有自己的服务主体名称,我的客户端代码如下所示:
string spn = "<service-name>/<my-pc-name>"
TcpClient client = new TcpClient(server, port);
NetworkStream stream = client.GetStream();
NegotiateStream neg = new NegotiateStream(stream, true);
neg.AuthenticateAsClient(CredentialCache.DefaultNetworkCredentials, spn);
在服务器端,收到的第一组字节是22,1,0,0,59,然后是“NTLMSSP” - 这是我没想到的。 我为SPN字符串尝试了几种不同的格式,不知道格式是什么。我最初用SPN创建了SPN
setspn -A <service-name>/<my-pc-name>.<domain-name> <my-user-name>
setspn -L将其成功列为:
TEST/<my-pc-name>.<domain-name>
我做错了什么,还是完全误解了这些东西? :)     
已邀请:
SPN名称的完整语法是
<service>/<user>@DOMAIN
;显然,可以省略域名。但是,如果用户名是
my-pc-name.domain-name
,那么你不应该进一步缩短它 - 提供完全符合SP5ѭ的SPN列表给你。     

要回复问题请先登录注册