首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何让NegotiateStream使用Kerberos?

如何让NegotiateStream使用Kerberos?
EN

Stack Overflow用户
提问于 2009-09-30 16:31:05
回答 1查看 2.5K关注 0票数 5

在询问了this question之后,我一直在尝试使用NegotiateStream在Java服务器上对Windows客户端进行身份验证。Java似乎没有很好的NTLM库支持,所以我一直假设我必须使用Kerberos,Java似乎对Kerberos的支持要好得多(通过GSS-API)。

问题是NegotiateStream似乎每次都在尝试使用NTLM。文档建议它可以使用这两种方法,但没有具体说明如何选择。我在API中看不到任何选项来控制它选择哪种机制。有什么办法吗?

我给自己取了一个服务主体名称,我的客户端代码如下所示:

代码语言:javascript
运行
复制
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

代码语言:javascript
运行
复制
setspn -A <service-name>/<my-pc-name>.<domain-name> <my-user-name>

setspn -L成功地将其列出为:

代码语言:javascript
运行
复制
TEST/<my-pc-name>.<domain-name>

是我做错了什么,还是完全误解了这件事?:)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2009-09-30 19:56:37

SPN名称的完整语法是<service>/<user>@DOMAIN;显然,可以省略域名。但是,如果用户名是SPN,那么您不应该进一步缩短它-提供与spn -L列出的完全相同的my-pc-name.domain-name

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1499267

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档