首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从WWW-Authenticate: Negotiate标头中确定使用的是NTLM还是Kerberos

如何从WWW-Authenticate: Negotiate标头中确定使用的是NTLM还是Kerberos
EN

Stack Overflow用户
提问于 2011-04-08 23:47:26
回答 4查看 34.7K关注 0票数 27

我正在用.Net编写一个客户端应用程序,它通过超文本传输协议与服务器通信。

在NTLM和Kerberos授权的情况下,我需要设置不同的请求缓冲选项。

如何确定使用的是NTLM还是Kerberos?有没有可能以某种方式解码“WWW-Authenticate:Negotiate”报头?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2013-09-09 23:06:15

您将找到答案here

简短的答案是:

代码语言:javascript
复制
1.Capture some successfully authorized request using Fiddler tool.
2.Choose "Inspectors" -> "Headers" tab.
3.Pay attention at "Cookies / Login" section, "Authorization" header.

如果授权令牌以"YII“开头,则使用Kerberos,但如果以"TlR”开头,则不使用Kerberos。

例如Kerberos:

代码语言:javascript
复制
Authorization: Negotiate YIIVDAYGKwYBE...

不是Kerberos:

代码语言:javascript
复制
Authorization: Negotiate TlRMTVNTUA...
票数 43
EN

Stack Overflow用户

发布于 2011-07-15 03:17:41

解析协商标头是一种繁琐的练习,因为它是使用ASN.1 DER构建的。

也就是说,您可能不一定需要对此进行解码,以便对有效负载做出良好的假设。虽然在GSSAPI中有一种用于NTLM的机制(下面有更多),但在我的经验中,客户端实际上并不使用它,他们只是发送NTLM头。在我的(诚然受到严格控制的)环境中,如果我看到Authorization: NTLM ...,那么这肯定是NTLM。如果我看到Authorization: Negotiate ...,那么这肯定是Kerberos。

严格地说,您应该查看报头中的机制列表,以确定该机制是NTLM还是Kerberos。我建议要么使用现成的ASN.1解码器,要么看看微软的decoding example。您将需要查找SPNEGO OID (1.3.6.1.5.5.2),然后在其中查找机制类型序列。序列中的第一个机制对应于响应令牌有效负载,因此您可以查看该OID来确定该机制。Kerberos的一些已知OID包括:

代码语言:javascript
复制
1.2.840.113554.1.2.2 (Kerberos 5)
1.2.840.48018.1.2.2 (Microsoft Kerberos 5)
1.3.5.1.5.2 (Kerberos 5 OID 2)

据我所知,NTLM的唯一OID是(引用自this blog):

代码语言:javascript
复制
1.3.6.1.4.1.311.2.2.10 (NLMP NTLM)
票数 7
EN

Stack Overflow用户

发布于 2011-07-15 00:52:17

如果服务器通知用户协商,您可以自由使用Kerberos、NTLM或SPNEGO支持的某些内容。但是,不能保证服务器支持客户端发送的每一个封装的auth方法。

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

https://stackoverflow.com/questions/5597573

复制
相关文章

相似问题

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