问题标签 [negotiate]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
514 浏览

groovy - Groovy HttpBuilder - 不要发送协商授权

我在连接 s so 时遇到问题(具体来说是 shibboleth)。我在groovy上使用HTTP Builder,一旦我得到401,我需要发送授权协商,但它只是不发送!我尝试手动或使用 HTTP builder 身份验证方法定义标头,仍然没有..有什么帮助吗?

0 投票
2 回答
1688 浏览

c++ - libcurl 协商回退到 ntlm

当 kerberos 不可用时,我希望 libcurl 回退到 NTLM。

我正在使用这个设置,

实际发生的是服务器发送支持的方案

但客户端只发送一个协商令牌

由于我还没有定义 SPN,我希望 NTLM 后备能够工作,但我明白了

我认为客户端应该发送几个可能的令牌并让服务器选择回答哪个。

有任何想法吗?

0 投票
1 回答
6178 浏览

c# - C# HTTPWebRequest 针对 Negotiate/Basic 与 Realm 站点

很抱歉对这个主题提出另一个问题,但我一直在阅读并且无法真正让它发挥作用......

切入正题...我有一个链接,可以下载一个 zip 文件。我已经获得了对这个网站(我的用户)的访问权限,现在我正在尝试编写一个程序来每隔一段时间获取 zip.file,以便我可以使用它的数据做一些事情。

当我刚刚尝试下载需要身份验证的东西的代码时(见下面的代码),我得到了一个 HTTP 401。我想知道为什么,因为我的凭据没问题,我可以使用浏览器获取文件。

在阅读和搜索之后,我得出的结论是我必须明确告诉身份验证。方法并找到 CredentialCache 示例。我之后做的是打开提琴手并查看网站的响应并找到以下标题:

有了这个,我可以知道什么身份验证。我需要的类型,所以我将代码更改为以下内容:

尽管如此,我还是收到了 401 HTTP 错误。在阅读了更多内容后,我发现我可能需要添加 request.PreAuthenticate = true; 但结果是一样的。我也读到了,我需要使用 request.Credentials = System.Net.CredentialCache.DefaultNetworkCredentials; 停止了 401 HTTP 错误,但开始给我“尝试了太多自动重定向”错误,这让我放弃了这个想法,因为默认凭据不是我想要的,我真的希望能够更改用户凭据。

经过几次尝试后,我放弃并尝试了基本身份验证。方法但没有成功(我想我以某种方式错过了“领域”部分)。

无论如何,我对此失去了一点希望,并对我所做的所有搜索感到困惑。我真的对请求和响应感到有点愚蠢......

任何人都可以对这个主题有所了解并帮助我吗?我更喜欢协商方法,因为它更安全。我是否必须以某种方式编写第二个请求来模拟握手?

==================================================== ==================================================== ==== 更新 1

在比较请求浏览器与应用程序后,我可以看到第一个请求存在一些差异。

浏览器

GET http://example.host/maps/selector/download?map_name=workline_fornecedores&organization_id=1 HTTP/1.1 接受:application/x-ms-application, image/jpeg, application/xaml+xml, image/gif, image/pjpeg , application/x-ms-xbap, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, application/x-shockwave-flash, / 接受语言:PTSI 用户代理:Mozilla/4.0(兼容;MSIE 7.0;Windows NT 6.1;WOW64;Trident/4.0;SLCC2;.NET CLR 2.0.50727;.NET CLR 3.5.30729;.NET CLR 3.0.30729 ; Media Center PC 6.0; InfoPath.2; MS-RTC LM 8; .NET4.0C; .NET4.0E; .NET CLR 1.1.4322) 接受编码:gzip,放气 连接:Keep-Alive 主机:example.host饼干:WT_FPC=id=2edd0fbf206582555011375854627180:lv=1375854634144:ss=1375854627180;_swa_uv=527730711375858227; __utma=163226403.1634134224.1376900542.1376900542.1376900542.1

……

应用程序

GET http://example.host/maps/selector/download?map_name=workline_fornecedores&organization_id=1 HTTP/1.1 主机:example.host 缓存控制:无存储,无缓存 杂注:无缓存 连接:保持活动

在这两个示例中,服务器都响应 401 HTTP 但有所不同

...

浏览器

GET http://example.host/authorizer/check_remote_user?url=%2Fmaps%2Fselector%2Fdownload%3Fmap_name%3Dworkline_fornecedores%26organization_id%3D1 HTTP/1.1 接受:application/x-ms-application, image/jpeg, application/xaml+ xml、图像/gif、图像/pjpeg、应用程序/x-ms-xbap、应用程序/vnd.ms-excel、应用程序/vnd.ms-powerpoint、应用程序/msword、应用程序/x-shockwave-flash、/ 接受语言:PTSI 用户代理:Mozilla/4.0(兼容;MSIE 7.0;Windows NT 6.1;WOW64;Trident/4.0;SLCC2;.NET CLR 2.0.50727;.NET CLR 3.5.30729;.NET CLR 3.0.30729 ; Media Center PC 6.0; InfoPath.2; MS-RTC LM 8; .NET4.0C; .NET4.0E; .NET CLR 1.1.4322) 接受编码:gzip,放气 连接:Keep-Alive 主机:example.host饼干:WT_FPC=id=2edd0fbf206582555011375854627180:lv=1375854634144:ss=1375854627180;_swa_uv=527730711375858227; __utma=163226403.1634134224.1376900542.1376900542.1376900542.1; 阿帕奇=10.188.178.249.1416485792985658

...

应用程序

GET http://example.host/authorizer/check_remote_user?url=%2Fmaps%2Fselector%2Fdownload%3Fmap_name%3Dworkline_fornecedores%26organization_id%3D1 HTTP/1.1 主机:example.host Cookie:Apache=10.188.178.249.1416491766480034 缓存控制: no-store,no-cache Pragma: no-cache

在此之后,浏览器请求继续发送凭据并获取文件,而我的应用程序什么也不做。

除了当前标头上的明显差异外,我还注意到 cookie 标头差异可能是原因吗?我将在 roder 中发出更多“浏览”请求,以检查 cookie 值是否更改..

0 投票
1 回答
550 浏览

ios - SSH 协商:错误的 SSH2_MSG_KEX_DH_GEX_REPLY 还是其他?

我正在为 iOS 做 unix 服务器 ssh 仿真。在谈判过程中,我遇到了许多障碍,并且仍在与这些障碍作斗争。最新的一个是关于 SSH2_MSG_KEX_DH_GEX_REPLY 数据包数据,我收到错误的数据包长度(可能是多余的填充)。整个流程的包描述如下:

现在在发送最后一个数据包服务器模拟并且没有数据返回 SSH2_MSG_NEWKEYS 之后。

我查看了其他 ssh 模拟器的代码,但没有一个有帮助。我完全无能为力,我该怎么办,请帮忙,我真的很沮丧。

0 投票
1 回答
1434 浏览

windows-authentication - Windows 可执行文件身份验证

通过搜索 Windows 身份验证方法和协议,我决定了解在一个简单的可执行文件中使用的 Negotiate、Kerberos 和 NTLM 之间的确切区别,然后再将其与 IIS 和 Web 身份验证一起使用。

我取得了很好的结果,但我仍然需要有关 Negotiate 和 Kerberos 的更多详细信息。

我有以下情况:

我创建了一个非常简单的 C# windows 窗体应用程序,它显示一个消息框,显示以下值:

请注意,我是本地计算机上具有管理员权限的域用户,我有以下结果:

  1. 当我在主动连接到 DC 时运行 exe 文件(双击)时,我得到了“协商”。

  2. 当我在主动连接到 DC 时运行 exe 文件(以不同用户身份运行/使用本地用户)时,我得到了“NTLM”。

  3. 当我使用“以管理员身份运行”或“以不同用户身份运行”运行 exe 文件时,我得到了“Kerberos”。

  4. 当我使用本地帐户在本地登录时运行 exe 文件时,我得到了“NTLM”。

我了解 LSA 将对本地帐户使用NTLM。此外,我了解 Active Directory 使用Kerberos对域用户和计算机进行身份验证。

我的问题是,为什么当我通过(双击)使用我的帐户运行 exe 或使用我的相同帐户“以不同用户身份运行”时,我得到协商身份验证类型?

更新:我注意到以下内容:

- 如果本地用户正在运行 exe,那么它是NTLM
- 如果域用户运行 exe,那么它是Negotiate(如果该用户是本地管理员)但是是Kerberos(如果该用户不是本地管理员)
- 如果域管理员运行 exe,那么它是Kerberos

我只是澄清一下这种行为。

0 投票
1 回答
861 浏览

wcf - WCF 客户端的默认默认 SPN 是“host/myhostname”还是“http/myhostname”,为什么?

由于这个问题,指定no 时的默认行为identityhost/myhostname.

然而,这似乎并不完全正确。

我有一个 SOAP WCF 服务(它是一个 Dynamics NAV Web 服务,但这对于以下内容应该无关紧要,因为问题完全是关于客户端的角度),如果我不指定任何身份,它就不起作用。

服务器实际上是在域用户帐户下运行的。 host/myhostname指定但不针对此用户帐户,仅针对机器帐户。 http/myhostname为此域用户帐户指定。

让我们看三个场景:

未指定身份

EndpointAddress使用以下代码创建:

在这种情况下,会发生以下情况:

  • 没有标头的 HTTP POST Authorization
  • 用 响应WWW-Authenticate: Negotiate
  • 带有标头的 HTTP POST Authorization: Negotiate XXXXXX是 1584 个 BASE64 编码字节,以96 130 6. 我在里面找不到任何可读的 ASCII。
  • Authorization: Negotiate XXX带有标题的响应。XXX是 126 个 BASE64 编码字节。我在里面找不到任何可读的 ASCII。
  • 带有标头的 HTTP POST Authorization: Negotiate XXXXXX是 1527 个 BASE64 编码字节。我在里面找不到任何可读的 ASCII。
  • WWW-Authenticate: Negotiate XXX带有标题的响应。XXX是 113 个 BASE64 编码字节。我在里面找不到任何可读的 ASCII。
  • 此时客户端抛出异常。内部异常消息是The target principal name is incorrect.

手动将标识设置为host/myhostname错误的字符串。

我使用以下代码创建 EndpointAddress:

如果host/myhostname是默认设置,上面的代码将明确指定此默认设置。所以我会期待同样的行为。但这有效。看来我回到了 NTLM。所以肯定是有区别的

这是正在发生的事情:

  • 没有标头的 HTTP POST Authorization
  • 用 响应WWW-Authenticate: Negotiate
  • HTTP POST,Authorization: Negotiate XXX其中 XXX 是 40 个 BASE64 编码字节。第一个字节是 ASCII 字母NTLMSSP
  • 响应WWW-Authenticate: Negotiate XXX其中 XXX 是 270 个 BASE64 编码字节。第一个字节是 ASCII 字母NTLMSSP。FQDN 似乎也被编码为 ASCII。
  • 带有 的 HTTP POST Authorization: Negotiate XXX,其中 XXX 是 590 个 BASE64 编码字节。这次没有 ASCII 字母。
  • 以有效载荷响应。

一个有趣的事实:如果我为任何错误的字符串指定身份,我的行为完全相同。因此,例如,如果我EndpointAddress使用以下代码指定:

通过回退到 NTLM,我也得到了上述行为。

我正确地将身份设置为http/myhostname

现在,当我指定设置的 SPN并且由于RFC 4559http/myhostname似乎是正确的选择时,它可以工作。这是配置:

这就是正在发生的事情:

  • 没有标头的 HTTP POST Authorization
  • 用 响应WWW-Authenticate: Negotiate
  • 带有标头的 HTTP POST Authorization: Negotiate XXX。XXX 是 1580 BASE64 编码字节。没有 ASCI 迹象。
  • 以有效载荷响应。

这个问题不是关于让它工作的热度,而是关于理解。令我困惑的是第一个示例和第二个示例之间的区别。我的想法是:

  1. 如果默认身份是host/myhostname,
  2. 手动指定身份应该没有区别host/myhostname
  3. 但有区别
  4. 所以这不能是默认身份。

所以我的问题是

  1. 实际的默认行为是什么,以及
  2. 为什么http/myhostname由于 RFC4559 而没有被选为默认 SPN?

和/或我是否理解完全错误的事情?

0 投票
1 回答
4564 浏览

java - 当 SPNEGO Kerberos 身份验证失败时,Chrome 会显示 ERR_UNEXPECTED

我按照本指南将我的系统与 Windows AD 集成。所以当有人登录windows域用户时,他可以自动登录到cas。如果用户不使用域用户,我希望系统返回正常的 html 登录页面。

现在我有一个问题,当我使用域用户时,它工作正常。但是当我使用非域用户时,chrome 会返回 ERR_UNEXPECTED 错误页面给我。可以看到tcp转储,系统已经返回401和登录页面html,但是chrome显示错误。

谁能给我一些建议?

JVM:1.8.0_111

CAS服务器核心:3.3

cas-server-support-spnego:3.3

铬:55

由wireshark(非域用户)的TCP转储流

0 投票
1 回答
1207 浏览

http-post - 在 IIS windows 集成身份验证上使用协商进行身份验证时,HTTP Post and Put 在特定工作站上返回 401 Unauthorized

我们在少量工作站(Windows 7)上有一个奇怪的行为。我们的 .NET 客户端正在与 IIS 中托管的 REST Api 服务 (Web API 2) 进行通信。客户端使用 System.Net.Http.HttpClient 访问 Api,并针对 .NET Framework 4.5.2。Api 配置为使用 Windows 集成身份验证(协商、NTLM)。

当客户端使用 HTTP GET/DELETE 调用 Api 时,一切正常。当客户端使用 HTTP POST/PUT 调用 Api 时(数据通过请求正文发送)。IIS 以 401 Unauthorized 响应。

这个问题消失了:

  • 在客户端工作站上运行 Fiddler 代理时。
  • IIS 身份验证配置为仅使用 NTLM

我浏览了许多博客文章和文章,但没有找到解决方案。

SignalR 表现出同样的奇怪行为。 客户端还使用 SignalR 与服务进行通信。客户端可以连接到 Hub 并接收消息。但是在尝试调用方法时得到 401(signalR 调用是使用 POST 完成的)。由于客户端在 Windows 7 上,它不支持 WebSockets。两种传输(服务器发送的事件、长轮询)上的行为相同。它与SignalR net45 的行为相似,在特定用户/机器组合上给出 401 Unauthorized。这篇文章中的修复(使用 Microsoft.AspNet.SignalR.Client.2.2.0\ lib\net40 \Microsoft.AspNet.SignalR.Client.dll)也适用于 SignalR。

编辑: SignalR net40 不使用 System.Net.Http 中的 HttpClient。所以报错一定是与System.Net.Http库有关。

非常感谢您的任何建议。

0 投票
1 回答
10644 浏览

google-chrome - Kerberos 授权不适用于 Chrome 和 FireFox,但适用于 IE

我按照本指南将 cas 与 Windows AD 集成。

几天前它在每个浏览器上都能正常工作。但它不仅适用于 IE,当我使用 firefox 浏览器时,仅将“Negotiate TlRMTVNTUAABAAAAAAAl4II4gAAAAAAAAAAAAAAAAAAAAAAAAGAbEdAAAADw==”发送到服务器,然后浏览器返回 cas 登录页面。

这个问题最近才在生产环境中发现。我有一个具有相同配置的测试环境,但到目前为止它工作正常。

我知道当 kerberos 票证未缓存在本地时,浏览器将发送“协商 TlRMT ...”。但是我可以用 klist 命令查看票证,它在 IE 上工作意味着票证没问题。

我猜这可能是由于windows客户端或广告服务器的一些配置引起的,谁能给我一些建议,tks!

https://1056-app.test.com ”已经添加到 Firefox 上的“network.negotiate-auth.trusted-uris”。而且我还尝试重新安装firefox,不起作用。

铬:55

即:11

火狐:56

客户端浏览器操作系统:Windows 7

AD 服务器操作系统:Windows Server 2008 R2

Cas 服务器操作系统:Suse11Sp3

这是 FireFox 上的 http 转储

客户端上的 klist

客户端上的setspn -Q cmd

keytab 创建命令

0 投票
1 回答
1430 浏览

jmeter - 使用 Apache JMeter 3.0 获取 SSO 应用程序的 HTTP-401 错误

我正在尝试测试的单点登录 (SSO) 应用程序收到 HTTP-401(未经授权)错误。我正在传递带有以下信息的 HTTP 授权管理器:用户名/密码/域/机制(KERBEROS)。

我在“查看结果树”侦听器中收到以下响应标头:

HTTP/1.1 401 未经授权的内容长度:11785 内容类型:文本/html 日期:2017 年 11 月 9 日星期四 21:55:38 GMT p3p:CP="NON CUR OTPi OUR NOR UNI" www-authenticate:协商缓存控制: no-cache pragma: no-cache Set-Cookie: PD-S-SESSION-ID=0_7Yn3C....Ra4+IsxI=; 路径=/; 安全的; HttpOnly

有人可以帮忙吗?

谢谢, 克鲁纳尔