问题标签 [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.
https - 在通过 http/2 进行 Kerberos 协商后,MS IE 和 Edge 回退到 http/1.1
我们最近更新了 Apache (v 2.4.33) 反向代理以使用 http/2
在第一次请求后,Win 10E 1709 上的 MS IE (v 11.431.16299.0) 和 MS Edge (v 41.16299.402.0) 似乎回落到 http/1.1。两个浏览器都坚持使用 http/1.1,即使在完全刷新并清除缓存后也不会更改为 http/2。
第一个请求(没有 Kerberos 协商身份验证标头)http/2:
第二个请求(带有协商标头)以及所有其他请求都是 http/1.1:
当切换到新选项卡时,浏览器直接使用 http/2 处理所有请求,因为身份验证过程是通过会话 cookie 完成的:
这种行为有什么合理的解释吗?我如何建议(强制)IE/Edge 继续使用 http/2?
Kerberos 协商在这里很容易解释: https ://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/47 /48/8468.4.png
teamviewer - 消息身份验证协商登录和密码连接在浏览器 login.teamviewer.com(管理控制台)
下午好,当使用 login.teamviewer.com(管理控制台)连接到计算机时,我收到消息: 在此处输入图像描述
login.teamviewer.com(管理控制台)
消息身份验证:“协商”
需要登录名和密码连接
它是什么?我该怎么做才能连接?
c# - Azure 函数 SignalR | 协商功能 | 失败并显示 500 错误代码
我已经使用 extensions.csproj 安装了 Microsoft.Azure.WebJobs.Extensions.SignalRService。
我能够使用以下 Azure 功能通过 Azure SignalR 服务发布消息。当 CosmosDB Collections 中存在任何 AddOrUpdate() 操作并在集线器中以名称“fruitUpdated”发送信号时,将触发函数。
但是协商功能现在似乎不起作用。它在没有任何线索的情况下抛出 500 错误代码。以下是样品,
运行.csx
函数.json
我尝试了所有组合。Azure 文档在某些情况下令人厌烦!没有输入\输出模式它应该是不受欢迎的。Azure 产品团队应该认真对待
SignalR 版本彼此不兼容。如果我们在服务器和客户端中使用不同版本的 SignalR dll,它们只会被动地忽略消息而不会引发错误。
我想我需要 connectionInfo 对象的 JSON Payload。你能在这里帮助我吗?
java - 检测到有缺陷的令牌(机制级别:检测到有缺陷的令牌(机制级别:无效的 SPNEGO NegTokenTarg 令牌:DER 长度的短读取))
尝试通过协商进行身份验证时检测到有缺陷的令牌,我还发现 curl 命令中生成的令牌以“TIR”开头,而 java 代码生成的令牌以“YII”开头。
Curl 命令工作正常 curl -v -i --negotiate -u :“ http://server/path ”
输出消息:
.net - 客户端有时会在启用 Kerberos 后协商 NTLM,直到客户端服务器重新启动。如何避免重启?
关于设置的一些上下文:
我们正在从 NTLM 切换到 Kerberos (Negotiate),以便在各种 .NET 工作负载(例如 IIS 托管的 Web API 或简单的 .NET 命令行程序)之间进行服务到服务身份验证。
对于从客户端到服务器的任何调用,中间都有一个 API 网关。我们在网关中有一些自定义逻辑,用于进行身份验证和执行 Kerberos(拒绝使用 NTLM 票证的协商标头)。健康的客户端-服务器流程如下所示:
- 客户端(C) 向服务器(S)发送请求
- 网关(G)拦截请求
- (G) 使用WWW-Authenticate: Negotiate返回 401 质询
- (C) 再次发送请求,带有Authorization: Negotiate [ticket]标头
- (G) 检查[ticket]并且:
5.a 如果[ticket]是 NTLM:“拒绝”请求(返回非成功状态代码)
5.b 如果[ticket]是 Kerberos:验证票证并(如果有效)通过请求到 (S)
现在,为了不进行重大更改,我们能够(在网关中)配置(在网关中)应该发生此 Kerberos 检查的请求,基于来自 (C) 的请求的原始目标,这应该是大致的主机名和 (S) 的港口。
此设置工作正常,但偶尔会出现这个难以复制的问题:
- 有时,对于某些 (S),当我们在 (G) 中启用 Kerberos 签入时,客户端 (C) 会继续发送 NTLM 票证(因此被拒绝)。
- 尽管 (C) 能够与 (G) 对话 Kerberos 的所有先决条件都得到满足 - 例如
klist get HTTP/spn-of-G
,即使在模拟完全相同的用户时,也可以从 (C) 执行并接收正确的 Kerberos 票证。 (C) 通常会运行为 - 最重要的是,在与 (C) 相同的服务器上,通常还有其他应用程序可以很好地通过相同的流程
- 重新启动 (C) 正在运行的 Windows Server 实例可修复此问题,使 (C) 在重新启动后向 (G) 发送正确的 Kerberos 票证
我的问题是:在不重新启动服务器的情况下,是否还有其他可能解决这种情况?
我已经尝试过但没有成功的事情:
- 重新启动在 (C) 上运行的应用程序。如果 (C) 是 IIS 应用程序,我尝试重新启动应用程序池,或者
iisreset
. 但是我已经看到这个问题也发生了,例如,在 (C) 是一个 C# 命令行程序每 15 分钟运行一次的情况下。 - 在 (C) 运行的服务器上刷新 DNS,使用
ipconfig /flushdns
- 清除运行 (C) 的服务器上所有缓存的 Kerberos 票证(
klist purge
使用 powershell 脚本为所有登录会话执行)
c# - 我可以避免 http 质询响应吗?
我们正在使用 HttpClient 联系 REST 服务,我们知道这需要 NTLM 或协商授权。
问题是 HttpClient 将首先在没有授权的情况下联系服务(这称为挑战-响应吗?)。客户端以 401 被服务器拒绝,然后客户端才会使用 Authorization 标头向服务器发送请求。
我们可以通过在第一个请求中添加 Authorization 标头来避免这种往返吗?
我们正在创建这样的http-client(问题与“NTLM”和“Negotiate”相同):
是否可以只创建我们自己的 NTLM 或 Kerberos 令牌并将其作为标头添加到 http-request?
javascript - Node 中的 Kerberos 包返回空响应
首先,感谢您查看/帮助。
我正在尝试使用Node.js 中 npm的kerberos包中的 initializeClient 函数。我的目标是能够向我们的内部 API 发出请求。
返回的响应是:
根据我所知道的这个函数的工作原理,你将服务、选项(包括主体)和回调函数传递给它。
似乎该函数正在运行,但没有返回数据。我还尝试将一个空对象作为选项传递,看起来它会从机器中提取当前票证,这是首选。
我在带有 Node v12.4.0 的 macOS 10.14 上运行它。我已经从 homebrew 安装了 krb5。
问题是,为什么这没有返回任何预期的内容(尚不确定预期的内容),这是能够使用 Kerberos 票证发出协商请求的正确路径吗?
再次感谢!
jmeter - JMeter 更喜欢协商而不是 NTLM
我们有一个应用程序,它启用了 Windows 身份验证,它在提供程序模块中具有协商和 NTLM。似乎 Jmeter 更喜欢使用 Negotiate 发送请求并且失败了,而当从 LoadRunner 尝试时,我们看到它总是作为 NTLM 发送并且它从那里通过。
有没有人遇到过这种情况?如果是,我们如何强制 Jmeter 使用 NTLM 身份验证而不是协商?
感谢帮助。
encryption - 解码 WWW-Authenticate:协商字符串 - SSO
一个小背景故事..:
在我的公司中,我们使用 IBM Cognos TM1 / IBM Cognos Analytics 和 BI Gateway 通过 SSO 进行身份验证(我们使用 LDAP ApacheDS 作为目录)。
由于 LDAP 目录的重组,我显示的用户名变得很奇怪,它是整个条目 DN,里面有一些特殊的字符和我的名字,但不是 UID(它聚集在 CN 中)
所以 SSO 仍然工作正常,现在我开始嗅探网络中的流量并在 cookie 中搜索我的用户信用,我发现了一个带有 NEGOTIATE 标头字符串的 SSO Cookie,是否有可能对此进行解码,以便我可以再次查看我的用户名发送?
感谢您的支持
c# - 如何从使用协商的 Blazor 服务器端应用程序中注销用户
我有一个使用 .NET core 3.1 的 Blazor 服务器端应用程序。它用于Microsoft.AspNetCore.Authentication.Negotiate
通过 Windows Credentials/Active Directory 对用户进行身份验证。
我遇到的问题是如何注销用户。经过各种研究,我发现某些外部身份验证方法不支持注销。例如,Windows/AD 不需要显式注销。您唯一需要做的就是在应用程序中本地清洁身份和声明原则。这就是我遇到的麻烦。当您关闭浏览器时,用户也会自动注销。
我正在使用此中间件使用 Negotiate 进行身份验证,并尝试在注销期间清除用户的声明。但它不起作用。
这是我的服务配置
预期结果是用户退出。但实际结果是用户保持登录状态。