Luk*_*ell 5 authentication negotiate
After asking this question, I've been trying to use NegotiateStream to authenticate a Windows client against a Java server. It seems that Java doesn't have great NTLM library support, so I've been working on the assumption that I'd have to use Kerberos, which Java seems to support much better (via the 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);
Run Code Online (Sandbox Code Playgroud)
在服务器端,收到的第一组字节是 22、1、0、0、59,然后是“NTLMSSP”——这是我没想到的。
我为 SPN 字符串尝试了几种不同的格式,但不确定正确的格式是什么。我最初创建了 SPN
setspn -A <service-name>/<my-pc-name>.<domain-name> <my-user-name>
Run Code Online (Sandbox Code Playgroud)
setspn -L 将其成功列出为:
TEST/<my-pc-name>.<domain-name>
Run Code Online (Sandbox Code Playgroud)
我做错了什么,还是完全误解了这些东西?:)
SPN 名称的完整语法是<service>/<user>@DOMAIN
;显然,可以省略域名。但是,如果用户名是my-pc-name.domain-name
,那么您不应该进一步缩短它 - 完全按照spn -L
向您列出的方式提供 SPN 。
归档时间: |
|
查看次数: |
2404 次 |
最近记录: |