经过询问这个问题 ,我一直在尝试使用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与
setspn -A <service-name>/<my-pc-name>.<domain-name> <my-user-name>
SETSPN -L成功将其列为:
TEST/<my-pc-name>.<domain-name>
我是不是做错了什么,或者完全误解这个东西? :)