问题标签 [http-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 投票
2 回答
1719 浏览

http - Negotiate HTTP 认证机制如何建立会话?

RFC 4559中所述,该Negotiate机制可能需要多个请求来完成 GSSAPI 上下文。但是,我无法从 RFC 中了解使用什么机制将这些请求相互关联。以 RFC 第 5 节中描述的示例为例:

直到第 5 步,我都清楚这一点。假设可能有许多客户端同时进行身份验证,服务器如何知道Authorization第 5 步中的标头是对第 4 步数据的响应?我看不到任何关于会话 cookie 或任何内容的提及,虽然我不是 GSSAPI 专家,但我认为 GSSAPI 数据中没有任何固有的东西可用于将其与身份验证会话相关联。

那么有什么关系呢?:)

0 投票
1 回答
2301 浏览

wcf - WCF HTTP 请求未经授权,客户端身份验证方案“协商”

我在带有 Windows Aut 的 IIS 上托管了 WCF 服务,我能够从本地计算机上的客户端应用程序 (WPF) 连接到该服务,但是当我尝试从其他计算机访问该服务时,我收到以下错误

HTTP 请求未经客户端身份验证方案“协商”的授权。从服务器收到的身份验证标头是“协商,NTLM”。---> System.Net.WebException:远程服务器返回错误:(401)未经授权。

我检查了我的 IIS 中的提供程序,其中“协商”是第一个,然后是“NTLM”。我也尝试删除“NTLM”,但这也没有帮助。

我的 App.config 中有以下配置

0 投票
1 回答
958 浏览

angularjs - 未经授权的错误:协商令牌而不是不记名令牌出现在 IE 中

我们使用 angularjs 和 web api 开发了一个 web 应用程序。该应用程序部署在 IIS 8.5 中。用户在 AD 域中,我们的站点被添加到本地 Intranet 区域,并且还选择了仅在 Intranet 区域选项自动登录。

我们在我们的应用程序中使用 OWIN 使用基于 Web api 令牌的身份验证。所以我们禁用了除匿名身份验证之外的所有 IIS 身份验证方法。登录应用程序时将在服务器端生成令牌,并将此令牌发送回客户端。我们将此令牌保存在 sessionStorage 中,并将附加在 http 请求标头中,例如“Authorization : Bearer auth_token”。

但有时,如果我们等待超过 1 分钟,我们会看到“授权:协商 some_token”正在发送我们的 api 调用。因此服务器将响应 401 未经授权的错误。

有人有同样的经历吗?提前致谢

0 投票
1 回答
3359 浏览

ntlm - 如何使用具有基本身份验证的 Service Worker(NTLM,协商)

我一直在尝试在 IIS 托管网站中使用服务工作者来缓存网站的一些静态内容。该站点是使用 Windows 身份验证的内部应用程序。我已经能够毫不费力地注册和运行服务工作者,但是一旦我打开缓存并开始将文件添加到缓存中,promise 就会因授权失败而失败。返回的 HTTP 结果是 401 Unauthorized。这是前几个请求的通常响应,直到浏览器和服务器能够协商授权。

我将很快发布一些有助于解释的代码。

编辑

0 投票
2 回答
2606 浏览

excel - Excel VBA:NTLM / Kerberos 和 VBA-Web / WinHttp 中的协商身份验证

我想与需要身份验证的网站(在 EXCEL VBA 中)的 REST API 交互,使用数字证书(.PFX文件)(NTLM 身份验证)或使用 Windows 域身份验证(Kerberos 和协商身份验证)。后者是首选,但我也不知道该怎么做,我希望有人可以分享如何进行这些身份验证的代码。我不能使用其他身份验证方法(例如基本),因为它不受支持。

目前我正在使用 VBA-Web ( github:VBA-tools:VBA-Web),并且我已经设法与 api 接口,但是以一种非常奇怪的方式。我跟踪了从 Chrome 到网站的网络调用,并注意到它会将 cookie 添加到每个调用的标题中。因此,在我的请求中,我补充说:

但是,这显然很烦人而且对用户不友好——因为每次我想使用我的 excel vba 代码时都必须找到 cookie。

此外,在跟踪 Chrome 中身份验证的网络调用后,我注意到它会经历各种重定向,并在重定向时收集所有 cookie。在一次特定调用期间,它会进行"negotiate"身份验证。

VBA-Web 似乎是基于的WinHTTP,所以我环顾四周,我真的迷失了如何与WinHTTP(或 WinINet 等)交互来进行这些身份验证。我查看了setCredentials方法Link,但我不确定 NTLM 或 Negotiate 的用户名和密码是什么?

或者,我尝试使用数字证书,但由于我有一个 PFX 文件,我不知道如何直接使用它。我看过Link,但我不完全确定安装 PFX 后我的证书存储在哪里。我在安装过程中选择 Personal ,这是否意味着它在 LOCAL_MACHINE\Personal 中?更重要的是我不知道主题名称是什么。

Microsoft 文档在C++或中JScript,所以这对我也没有帮助。

因此,如果我能够进行身份验证并获取 cookie,那么其余的应该没问题。我将如何使用 VBA 在 Excel 中使用两种身份验证方法中的任何一种来执行此操作?

PS我希望我的问题很清楚。随时要求澄清。我找到的所有答案都恢复为基本身份验证,但我不能这样做。我将与您分享我尝试与之交互的网站,但它位于 Intranet 上。

0 投票
1 回答
797 浏览

git - git "fatal: Authentication failed for 'http:...'" 来自 Microsoft Visual Studio Team Foundation Server

我将我的 Ubuntu 升级到 18.10(从 17.10)。现在我无法再从 CLI 连接到我的项目的 Microsoft Visual Studio Team Foundation Server(版本 16.131.27701.1)。(我已经两周没有在存储库上工作了。所以我不知道服务器端是否也在此期间发生了变化。)

(是的,它不是 HTTPS,而是通过一些 VPN。)

不幸的是,我无法为我的情况找到有用的答案。

一些研究表明:

因此,似乎通过 HTTP 标头宣布了协商(Kerberos 或 NTLM)或 NTLM 进行身份验证。

不工作;HTML 标题元素是:

然而

工作正常。

据我了解https://docs.microsoft.com/en-us/dotnet/framework/wcf/feature-details/understanding-http-authenticationNegotiate优于NTLM.

Negotiate所以对我来说,cURL在这种情况下似乎不起作用。(据我了解 MS 文档,如果 Kerberos 可用,连接应该首选 Kerberos,如果 Kerberos 不可用,则回退到 NTLM。)

问题:

  • 如何检查服务器端或我的本地 cURL 是否不支持 Kerberos。
  • 是否有一个选项可以强制 git 使用NTLM而不是Negotiate. (我在不同的 stackoverflow 文章中阅读了一些关于 HTTP/NTLM 代理的内容,但是当我尝试将 Git 存储库配置为 NTLM 代理时它不起作用——我真的没想到它会起作用。)
  • 解决问题或获取更多详细信息的任何其他想法是怎么回事?

非常感谢!

0 投票
1 回答
192 浏览

firefox - Firefox SPNEGO 协商协议 - 多个连接?

我在我的 Web 应用程序中使用 gssapi/Kerberos 身份验证,并且我希望通过浏览器进行单点登录。

问题是,Firefox 在没有身份验证的情况下向服务器发送了一个初始请求,并收到了 401。但它包含一个 keep-alive 标头:

如果服务器尊重此保持活动请求并返回 WWW-Authenticate 标头,则 Firefox 行为正确并发送本地用户的 Kerberos 凭据,一切都很好。

但是,如果服务器不保持连接处于活动状态,Firefox 将不会发送带有凭据的另一个请求,即使响应具有 WWW-Authenticate 标头。

这是一个问题,因为我使用的是 Django,而 Django 不支持 keep-alive 协议。

有没有办法让 Firefox 在没有 keep-alive 的情况下进行协商?在定义 Negotiate extension 的 RFC 中,没有要求重新使用相同的连接。

或者,有没有办法让 Firefox 在第一次请求时抢先发送凭据?这在 RFC 中明确允许。

0 投票
1 回答
4087 浏览

c# - 什么是 NTLM/身份验证/协商 Web 身份验证

我了解基本身份验证和摘要身份验证。但我搜索了很多,我在 NTLM、Authenticate 和 Negotiate 方面苦苦挣扎。

我认为,如果我错了,请纠正我,NTLM 和 Authenticate 是同一协议的两个术语。

协商首先尝试 NTLM,然后回退到消化,然后回退到基本连接。

那是对的吗?如果是这样,哪里是一个很好的例子,说明如何在 C# 中连接仅用于 NTLM 和协商。

我有两个用例。首先是我需要拉下一个文件。所以发出一个请求,得到一个 XML 文件作为响应,读下来,完成。

第二个是查询 OData,因此有数百到数千个 Web 请求,每个请求都将提供 JSON(或 XML)作为响应。

0 投票
1 回答
218 浏览

c++ - 仅在本地主机上工作的模拟 HTTP 身份验证

我正在处理在 ASP.NET Web API 上支持 Windows 身份验证,并且客户端是 C++。我从Microsoft获取了这个示例代码

并基于 HTTP.Sys 编写了一个基本的 ASP.NET Web API:

在我使用 localhost 之前,C++ 客户端应用程序能够在不提示输入凭据的情况下连接并执行 GET 请求(即通过 Negotiate 使用 Windows 身份验证)。当我在机器的 IP 上托管服务器时(例如http://192.168.1.1),客户端应用程序停止工作并使用用户凭据的回退选项(它获得 401 然后使用凭据重新发送 GET 请求) .

它看起来像是某个地方的安全问题。可能是什么问题?

  • 我正在使用 HTTP 并且需要 HTTPS?
  • AD控制器可以防止这种情况吗?
  • 操作系统(Windows 10 1803)会阻止这种情况吗?
  • 防火墙?

谢谢!

0 投票
1 回答
476 浏览

asp.net-core - 在 HTTP.sys 上使用 Windows 身份验证时如何避免多个 401

我有一个使用 .NET core 2.2 和 HTTP.Sys 的 Web API。我已经设置了 Windows 身份验证,当用户获得授权时,我可以看到 401 WWW-Negotiate 质询,然后是 200。

现在我已经多次执行相同的请求,但我发现每个请求都面临挑战,这会减慢系统速度并影响性能。我的示例客户:

我读到 IIS 似乎可以authPersistNonNTLM=true 在这里使用,但我无法为纯 HTTP.sys 设置类似的设置。任何想法?

谢谢,