使用 HttpClient 的 .NET Core SPNEGO 身份验证

2024-06-19

我目前正在编写一个简单的基于 .NET Core 的客户端,用于通过 WebHCat 与 Hadoop 集群进行交互,并且我正在尝试弄清楚如何使用 SPNEGO 进行身份验证,就像在curl 或 Powershell Core 等中一样。

使用 Curl 我可以像这样查询 WebHCat 的状态端点:

curl "http://10.2.0.9:50111/templeton/v1/status" --negotiate -k -u :

相同的请求也可以在 Powershell Core 中执行:

$client = New-Object System.Net.WebClient;
$client.UseDefaultCredentials = $true;
$client.DownloadString("http://10.2.0.9:50111/templeton/v1/status");

但是,当在与集群位于同一服务器上的 .NET Core 项目中运行以下内容时:

using System;
using System.Net;
using System.Net.Http;
using System.Threading;
using System.Threading.Tasks;

namespace testauth
{
    class Program
    {
        static async Task Main(string[] args)
        {
            var host = "http://10.2.0.9:50111/templeton/v1/status";
            var handler = new HttpClientHandler
            {
                UseDefaultCredentials = true,
                AllowAutoRedirect = true,
            };
            using (var client = new HttpClient(new LoggingHandler(handler)))
            {
                var res = await client.SendAsync(new HttpRequestMessage(HttpMethod.Get, host));
            }
        }
    }

}

我收到以下错误:

Unhandled Exception: System.ComponentModel.Win32Exception: GSSAPI operation failed with error - An invalid status code was supplied (Server not found in Kerberos database).
   at System.Net.NTAuthentication.GetOutgoingBlob(Byte[] incomingBlob, Boolean throwOnError, SecurityStatusPal& statusCode)

客户端正在运行 .NET Core 2.1,如中所述这个问题 https://github.com/dotnet/corefx/issues/25988我应该能够将默认凭据传递到处理程序中,并且它会按预期工作。

我还尝试用 C# 编写在 PowerShell Core 中使用的相同代码,尽管代码相同,但仍然抛出相同的错误?

我可以提供的唯一其他详细信息是 Kerberos 连接到只有一个用户的 Active Directory 实例,并且所有这些请求都是在为该用户创建票证后运行的kinit.


我设法找到了解决办法。在 ASP.NET Core 2.1 中,他们引入了一个新的SocketsHttpHandler https://learn.microsoft.com/en-us/dotnet/core/whats-new/dotnet-core-2-1#sockets-improvements默认情况下用于请求。这意味着在某些平台上它可能会覆盖HttpHandler在我的请求中提供,因此默认您应该使用的套接字处理程序:

AppContext.SetSwitch("System.Net.Http.UseSocketsHttpHandler", false);

这解决了我的要求。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 HttpClient 的 .NET Core SPNEGO 身份验证 的相关文章

  • 插入多重集中:在该值第一次出现之前而不是最后一次出现之后

    正如标题所示 multiset 在所有相同值的范围末尾插入一个值 例如 在多重集中插入 21 2 2 3做到了1 2 2 new 2 3 如何在所有相同值的范围开头插入新值 例如 在多重集中插入 21 2 2 3应该使1 new 2 2 2
  • 为什么这个 IA32 汇编代码有 3 个 leaal 指令?

    我编译了这个C函数 int calc int x int y int z return x 3 y 19 z 我在 calc s 中得到了这个 我正在注释正在发生的事情 file calc c text globl calc type ca
  • MVC 2视图显示错误的模型信息

    我在一个项目中使用 MVC 2 但我遇到了视图问题 在控制器中我有代码 return View calendarDay 如果我调试这一行并检查 calendarDay 它会告诉我 calendarDay Id 属性等于 2 在视图中我有一些
  • 在 C# 中格式化 Resharper 属性的支持字段

    有没有办法控制 Resharper 放置其支持字段的位置 目前 它试图让他们在班级中名列前茅 我希望他们能去到酒店的正上方 还没有
  • 资源文件中的控制字符 C#

    我想添加Left To Right控制字符在resource resx文件输入Visual Studio 我在互联网上搜索并找到了一个名为在 NET 资源文件中转义序列的另一种方法 http www devx com tips Tip 34
  • 如何防止 Parallel.ForEach 循环在运行时更改任务数量?

    我正在使用Parallel ForEach循环做一些工作 我用localInit像这样 localInit gt new foo new Foo bars CreateBars 根据文档 https learn microsoft com
  • 带有成员 (operator[]) 函数的 invoke_result

    如何为成员函数正确调用invoke result 或者专门用于运算符成员函数 我试过std invoke result
  • 除非我在开​​始时声明变量,否则为什么会收到“错误未声明的标识符”?

    当我有以下情况时 include stdafx h include
  • gcc 的错误?模板类中友元函数的访问控制问题

    我有一个模板类 并在类中定义了一个友元函数 include
  • C++ 访问嵌套类的私有成员

    标题可能有点误导 我有以下问题 我有一棵由叶子和内部节点组成的树 用户应该能够在叶子中存储任何信息and该树有一些方法可以获取一组用户定义的值 并且需要在恒定时间内 未摊销 访问相应的叶子 我提出了以下想法 但它不起作用 因为不幸的是我无法
  • “双免”是什么意思?

    正如标题所暗示的那样 我是 C 语言的新手 并且很快就会有期中考试 我目前正在修改过去的论文 一个反复出现的主题是双重自由问题 我理解就是调用的过程free 在同一个内存位置两次 但我有几个问题我不能 100 确定如何回答 问题1 C中双重
  • ofstream::operator<<(streambuf) 是一种复制文件的缓慢方法

    我需要一种跨平台 无需外部库的复制文件的方式 在我的第一遍中 我想出了 省略错误处理 char buffer LEN ifstream src srcFile ios in ios binary ofstream dest destFile
  • llvm clang 编译器上的dynamic_cast失败

    我看到一个奇怪的失败dynamic cast正在返回NULL在 clang 编译器上 但相同的代码可以在 gcc 环境下运行 您能否指出根本原因是什么 之间可能有什么区别dynamic cast关于 llvm 和 gcc 我正在使用两个编译
  • 如何在运行时统一捕捉两个对象?

    这是 3D 模型 我想将另一个像这样的模型连接到顶部的银色连接器 并将另一个模型连接到右侧 所以请帮助我捕捉它 https i stack imgur com qoWwl png我想知道如何在运行时将两个 3D 对象对齐在一起 即 在 玩
  • 从 Windows 选择声音并播放它们

    我有一个 WinForms 应用程序 该应用程序有一个 首选项 部分 用户可以在其中选择显示警报时播放哪些声音 是否可以有一个组合框 用户可以从 Windows 存储的声音中进行选择 例如 紧急停止 紧急蜂鸣 等 这些可以在 控制面板 gt
  • 如何打开 Outlook 已接收和阅读电子邮件

    我们有 5 个人 使用同一封电子邮件通过 Outlook 回复客户 我想设计一个程序来打开所有已发送的电子邮件 阅读它们 打开它们 找到第一个人的签名 并在他 她的计数器中添加一个数字 以便我可以得出一些统计数据 关于如何打开 Outloo
  • 成员函数的Decltype

    class A int f int x int j return 2 decltype f p 给我错误 error decltype cannot resolve address of overloaded function 我不明白为什
  • Web API 2 c# 中的 Google reCaptcha

    我有一个 ASP NET Web API 2 项目 我正在尝试从表单中读取 Google Captcha 我尝试了这段代码 public string Post FoundingRequest model var response Requ
  • 实现多个接口的 Service Fabric Actor 接口

    我正在构建一个应用程序 其中有多个不同的参与者类型 这些参与者类型对于某些不同的数据对象具有相同类型的行为 CRUD 为了更轻松地创建处理此问题的代码 我尝试创建一个这些参与者可以实现的接口 这意味着我有一个看起来像这样的参与者界面 pub
  • SQlite 查询 - 如何检索多列数据?

    我很难在网上找到一个关于使用 xcode 和 cocos2dx 从 SQlite DB 获取多个值的工作示例 这是我的sql查询 char sql query 100 sprintf sql query SELECT FROM SQList

随机推荐

  • 用于开发和生产的不同种子

    根据构建配置 调试 发布 使用实体框架 6 以不同方式为数据库设定种子的推荐方法是什么 现在我正在使用 MigrateDatabaseToLatestVersion 初始值设定项 在开发过程中 我喜欢在数据库中使用虚假数据进行测试 因此 我
  • 如何在 Struts 2 OGNL 中将参数传递给方法调用

    我想使用属性作为对象方法的参数
  • 使用 Tkinter 打开网页

    因此 我的应用程序需要能够打开其中的单个网页 并且它必须来自互联网并且未保存 特别是我想使用 Tkinter GUI 工具包 因为它是我最熟悉的工具包 最重要的是 我希望能够在窗口中生成事件 例如单击鼠标 但无需实际使用鼠标 有什么好的方法
  • 如何在 Eclipse 中以编程方式关闭编辑器 [关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 当我们删除一个项目 IProject 时 我们想关闭它的所有打开的文件 我可以通过项目的成员方法访问 IFiles 我想关闭已删除项目的所有
  • MATLAB 类的 Description 和DetailedDescription 属性

    内置 MATLAB 类具有 Description 和 DetailedDescription 属性的值 gt gt handle ans meta class handle Package meta Properties Name han
  • AdMob 插页式广告仅显示一次

    当广告在一个会话内第二次或第三次打开时 LogCat 会显示错误消息 尝试使用不同的广告管理器启动新的 AdActivity 我通过应用程序主屏幕的 on resume 方法中的意图启动插页式广告 Override public void
  • Python speedtest.net,或等效的[关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 是否有一个 Python 库可以实现 SpeedTest net 测试或等效的互联网连接速度测试 GitHub上有一个项目叫速度检查 https gi
  • 用 java 编写解释器时的 switch 或 if 语句

    当前的作业需要我编写一个程序 以一种非常微小且基本的编程语言 行为有点像 FORTRAN 来读取包含指令的文件并执行这些指令 基本上它是我猜的语言的简单解释器 它是完全线性的 所有语句都是按顺序定义的 并且只有字符串和整数变量 我需要查找和
  • 获取请求的客户端 IP 地址而不是 Cloudflare 的 IP 地址

    Cloudflare 会更改传入请求的 IP 地址 因为 Cloudflare 是我的网站和互联网之间的中间件 代理 我该怎么办获取请求的初始IP地址 而不是 Cloudflare 的 IP 地址 我听说过mod cloudflare但是这
  • 使用 JQuery 选择表行并选中复选框

    我有一个表 我想选择满足我的条件的行并选中它们各自的复选框 假设我想获取带有日期的行2013 03 21 我怎样才能使用 JQuery 来做到这一点 table tr td Record1 td td 2013 03 21 td td td
  • 无法在 Mac 上启动 MySQL

    使用 Brew 安装后 我无法运行 MySQL 我使用的是 OS X El Capitan 版本 10 11 3 和 MySQL Server 版本 5 7 11 当我启动服务器时 我收到 启动 MySQL 错误 服务器退出而不更新 PID
  • 将 value 转换为 bool 的魔法

    今天我意识到将值转换为 bool 是一种魔法 int value 0x100 unsigned char uc static cast
  • 通过eclipse运行ant找不到环境变量,但是通过终端运行ant就可以了

    当我通过 Eclipse 运行 ant 时 一些目标构建得很好 但那些需要特定环境变量 即我在 profile 文件中设置的 SOME SDK 的目标将无法工作 即使我尝试回显 env JAVA HOME Ant 通过 eclipse 也只
  • 如何使用 iOS 可达性

    我正在开发一个使用网络的 iPhone 应用程序 iPhone 通过 HTTP 请求与我的服务器通信 并且应该可以在 WiFi 和 3G 上运行 我目前使用NSURLConnection initWithRequest向我的服务器发送异步请
  • PHP - 当 false 时获取 bool 来回显 false

    以下代码不会打印出任何内容 bool val bool false echo bool val 但下面的代码打印1 bool val bool true echo bool val 有没有更好的打印方法0 or false when boo
  • 防止 FragmentPagerAdapter 中的 WebView 重新加载?

    我有一个 FragmentPagerAdapter 用于显示大约 6 个选项卡 所有选项卡都从 Web 服务器加载数据 其中一个选项卡包含一个从我的服务器加载图像的 WebView 生成图像的服务器端成本很高 因此我想减少重新加载 WebV
  • ASP.NET MVC 3 - microsoft-web-helpers v1.1 的问题

    我从 nuget 升级了我的 microsof web helpers 软件包 它本身依赖于 facebook 和 twitter API 现在 当我的应用程序尝试运行时 出现以下错误 编译器错误消息 CS0246 找不到类型或命名空间名称
  • 将数组转换为具有默认值的对象的更简洁方法? (洛达什可用)

    我有一个数组 比如说 a b c 我想将其转换为一个对象 该对象以数组值作为键和我可以设置的默认值 所以如果默认值是true 我希望我的输出是 a true b true c true 下面的代码是否有更简洁的版本来实现此目的 var my
  • 核心数据迁移后出现 NSRangeException

    在向我的应用程序添加新的核心数据模型版本后 我执行了轻量级迁移 显然成功了 迁移的文件加载正常 但在第一次尝试通过特定关系访问属性时 应用程序崩溃并显示NSRangeException NSArrayM objectAtIndex inde
  • 使用 HttpClient 的 .NET Core SPNEGO 身份验证

    我目前正在编写一个简单的基于 NET Core 的客户端 用于通过 WebHCat 与 Hadoop 集群进行交互 并且我正在尝试弄清楚如何使用 SPNEGO 进行身份验证 就像在curl 或 Powershell Core 等中一样 使用