为什么 Windows 身份验证可以从本地到服务器工作,但不能从服务器到服务器工作?

2024-04-12

我有两个网站,A and B. A使用一个 APIB暴露,并且B需要 Windows 身份验证。两个站点都位于域中D.

API 通过以下方式使用HttpClient,以及当站点A在我的域帐户下本地运行(位于 DomainP),访问被授予。在这种情况下,HttpClient实例化如下:

using(var client = new HttpClient(new HttpClientHandler { UseDefaultCredentials: true }))

When A部署到测试服务器,上面的结果是401 Unauthorized回复。测试服务器上的应用程序池在域中的服务帐户下运行D.

当明确使用该服务帐户时,如下所示:

var credential = new NetworkCredential("service-account", "password", "D");
var cache = new CredentialCache
{
  {
    new Uri(apiServerUri), "NTLM", credential
  }
};
var handler = new HttpClientHandler
{
  Credentials = cache
};

using(var client = new HttpClient(handler))
...

再次运行站点A在本地,访问权限仍然被授予。当通过浏览器直接访问 API 并指定服务帐户凭据时,也会授予访问权限。日志表明它肯定是用于访问 API 的服务帐户。

将上述内容部署回测试服务器仍然会导致401 Unauthorized.

部署站点A到 IIS 的本地实例,也成功使用了 APIB.

跑步现场B本地,然后通过站点访问它A本地,结果是401 Unauthorized.

通过测试服务器上的浏览器访问 API,其中A已部署,并指定服务帐户凭据,还会给出401 Unauthorized.

我不知道从这里到哪里去 - 我是否在代码中遗漏了一些东西来让它工作?或者可能是 IIS 或 AD 问题?


虽然我还没有确切地确定why这个解决方法有效,或者如果有better这样做的方式(因为这感觉很笨拙),以下允许A连接到B,当两者位于同一服务器上时。

Site B在 IIS 中有一个额外的主机绑定设置,用于侦听localhost:12345. Site A已配置为连接到该端点,而不是站点的域名B。身份验证现在可以正常工作。

如果有人能解释为什么会出现这种情况,我会很感兴趣 - 我不喜欢“魔法”修复。

edit看来这篇知识库文章 https://support2.microsoft.com/default.aspx?scid=kb;en-us;896861是造成此行为的一个可能原因。具体来说:

当您使用完全限定域名 (FQDN) 或自定义主机时 标头浏览托管在以下计算机上的本地网站 运行 Microsoft Internet 信息服务 (IIS) 5.1 或更高版本 版本,您可能会收到类似于以下内容的错误消息 以下:HTTP 401.1 - 未经授权:登录失败出现此问题 当网站使用集成身份验证并且名称为 映射到本地环回地址

and

因此,如果您使用的 FQDN 或自定义主机标头与本地计算机名称不匹配,身份验证将失败。

在这些服务器上,注册表修改实际上并不是一个选项,因此看起来我们将使用解决方法。

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

为什么 Windows 身份验证可以从本地到服务器工作,但不能从服务器到服务器工作? 的相关文章

  • IdentityServer 4 对它的工作原理感到困惑

    我阅读和观看了很多有关 Identity Server 4 的内容 但我仍然对它有点困惑 因为似乎有很多移动部件 我现在明白这是一个单独的项目 它处理用户身份验证 我仍然不明白的是用户如何注册它 谁存储用户名 密码 我打算进行此设置 Rea
  • 如何填充 ToolStripComboBox?

    我发现它很难将数据绑定到ToolStripComboBox 好像没有这个ValueMember and DisplayMember特性 怎么绑定呢 访问toolstripcombobox中包装的组合框并访问其ValueMember Disp
  • 在Linux中,找不到框架“.NETFramework,Version=v4.5”的参考程序集

    我已经设置了 Visual studio 来在我的 Ubuntu 机器上编译 C 代码 我将工作区 我的代码加载到 VS 我可以看到以下错误 The reference assemblies for framework NETFramewo
  • 为什么可以通过ref参数修改readonly字段?

    考虑 class Foo private readonly string value public Foo Bar ref value private void Bar ref string value value hello world
  • C# 存档中的文件列表

    我正在创建一个 FileFinder 类 您可以在其中进行如下搜索 var fileFinder new FileFinder new string C MyFolder1 C MyFolder2 new string
  • 使用valgrind进行GDB远程调试

    如果我使用远程调试gdb我连接到gdbserver using target remote host 2345 如果我使用 valgrind 和 gdb 调试内存错误 以中断无效内存访问 我会使用 target remote vgdb 启动
  • IQueryable 单元或集成测试

    我有一个 Web api 并且公开了一个端点 如下所示 api 假期 name name 这是 Web api 的控制器 get 方法 public IQueryable
  • 在视口中查找 WPF 控件

    Updated 这可能是一个简单或复杂的问题 但在 wpf 中 我有一个列表框 我用一个填充数据模板从列表中 有没有办法找出特定的数据模板项位于视口中 即我已滚动到其位置并且可以查看 目前我连接到了 listbox ScrollChange
  • 为什么我的单选按钮不起作用?

    我正在 Visual C 2005 中开发 MFC 对话框应用程序 我的单选按钮是 m Small m Medium 和 m Large 它们都没有在我的 m Summary 编辑框中显示应有的内容 可能出什么问题了 这是我的代码 Pizz
  • 在mysql连接字符串中添加应用程序名称/程序名称[关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 我正在寻找一种解决方案 在连接字符串中添加应用程序名称或程序名称 以便它在 MySQL Workbench 中的 客户端连接 下可见 SQL
  • C++ 中的双精度型数字

    尽管内部表示有 17 位 但 IEE754 64 位 浮点应该正确表示 15 位有效数字 有没有办法强制第 16 位和第 17 位为零 Ref http msdn microsoft com en us library system dou
  • Outlook 加载项,无法读取未定义的属性“BeginRequestEventArgs”

    我使用 Visual Studio 开发了 Outlook 插件 我的插件有一个按钮 用于填充会议邀请正文中的详细信息并添加所需的与会者 这在 99 的情况下都有效 但是 时不时地它会给我下面的 JavaScript 错误 Uncaught
  • 有没有办法在 ASP.net 中制作像 gmail 那样的进度条?

    有没有办法在 ASP net 中制作像 gmail 那样的进度条 以下是一些基于 ASP NET 的进度栏控件 ASP NET AJAX 进度条控件 http mattberseth com blog 2008 05 aspnet ajax
  • 在屏幕上获取字符

    我浏览了 NCurses 函数列表 似乎找不到返回已打印在屏幕上的字符的函数 每个字符单元格中存储的字符是否有可访问的值 如果没有的话Windows终端有类似的功能吗 我想用它来替换屏幕上某个值的所有字符 例如 所有a s 具有不同的特征
  • C++ new * char 不为空

    我有一个问题 我在 ASIO 中开发服务器 数据包采用尖头字符 当我创建新字符时 例如char buffer new char 128 我必须手动将其清理为空 By for int i 0 i lt 128 i buffer i 0x00
  • String.Empty 与 "" [重复]

    这个问题在这里已经有答案了 可能的重复 String Empty 和 有什么区别 https stackoverflow com questions 151472 what is the difference between string
  • OpenGL:仅获取模板缓冲区而没有深度缓冲区?

    我想获取一个模板缓冲区 但如果可能的话 不要承受附加深度缓冲区的开销 因为我不会使用它 我发现的大多数资源表明 虽然模板缓冲区是可选的 例如 排除它以利于获得更高的深度缓冲区精度 但我还没有看到任何请求并成功获取仅 8 位模板缓冲区的代码
  • 堆栈是向上增长还是向下增长?

    我在 C 中有这段代码 int q 10 int s 5 int a 3 printf Address of a d n int a printf Address of a 1 d n int a 1 printf Address of a
  • 我可以在“字节数”设置为零的情况下调用 memcpy() 和 memmove() 吗?

    当我实际上没有什么可以移动 复制的时候 我是否需要处理这些情况memmove memcpy 作为边缘情况 int numberOfBytes if numberOfBytes 0 memmove dest source numberOfBy
  • ListItem 附加自定义值

    我在asp net中使用dropdownlist 它有代表下拉列表项目的ListItem集合 每个ListItem只有两个字段来保存数据 Value和Text字段 但这些还不够 我想保存更多数据对于每个项目 假设附加字段中有 Text1 和

随机推荐

  • 有没有办法“完全”禁用“编辑并继续”?

    我想知道是否有一种方法可以在 Visual Studio 2008 中调试代码时完全锁定我的代码 当作为 64 位应用程序运行时 代码文档会自动锁定 这是我非常喜欢的 然而 我的大部分编码都是为 Excel 制作加载项 它是 32 位的 结
  • 当我在 xcode 项目中使用 #include 行时,它在哪里查找 gl.h 文件?

    我正在将 Linux 的开源 C 程序移植到 os x 我一直在改变线路 include
  • 自定义图像作为单选按钮

    我一直在尝试使用 HTML CSS 和 JavaScript 制作自定义单选按钮 我一直在浏览之前有关单选按钮的问题 我觉得我已经实施了这些建议 但我的 jpeg 图像仍然被切成两半 我显然错过了一些东西 但不确定它是什么 下面是我的 HT
  • Python Flask 未与 docker-compose 一起运行 [重复]

    这个问题在这里已经有答案了 我有一个简单的 Flask 应用程序 由 Web 部分和数据库部分组成 代码可以找到here https github com wiwa1978 flask employees 在本地运行这个 Flask 应用程
  • 使用自签名证书对 OS X 应用程序进行协同签名有何影响?

    Apple 似乎将某些 OS X API 例如沙箱 限制为由可信证书共同签名的应用程序 例如一份发给付费 Mac 开发者计划的成员 OS X 如何对待使用自签名 或开发 证书联合签名的应用程序 这些功能 API 是否可用 唯一的区别是使用默
  • ./sysroot.sh:不允许操作

    我正在尝试安装 cydia 源代码 git clone git git saurik com cydia git cd cydia 但是当我输入 sysroot sh 时 我收到此错误 bash sysroot sh usr bin env
  • vscode 中使用 antd 框架的按钮提示

    我在 vscode 中使用 antd 的按钮和输入 但它在按钮上显示错误 我想知道为什么 我试过输入法 没有显示错误 如图所示 import React from react import styles from index css imp
  • 更新 ZipArchive 中的文件

    我有一个 ZipArchive 对象 其中包含我正在修改的 XML 文件 然后我想返回修改后的 ZipArchive 这是我的代码 var package File ReadAllBytes location of existing zip
  • Composer - vcs 上请求的包问题

    我分叉了https github com calebporzio onboard https github com calebporzio onboard to https github com mpjraaij onboard tree
  • 如何防止递归函数重新初始化累加变量?

    这个函数是用 JavaScript 编写的 但我认为这个概念可以用其他一些编程语言来实现 function uniteUnique arr let seenBefore the accumulating array for let item
  • 如何使用 Altair 显示百分比直方图而不是计数

    如何使用 Altair 和 Pandas 获取总数百分比直方图而不是计数直方图 我现在有这个 我通过这样做得到了 d age 12 32 43 54 32 32 12 dfTest pd DataFrame data d alt Chart
  • 如何降低 PickerView 中选择行的速度?

    我的目标是创建一台老虎机 其中的行一排一排地旋转 它们需要一排一排地停止旋转 然而 为了让它看起来漂亮 这些行需要旋转至少 3 秒 我认为 PickerView 是最好的选择 因为我不知道如何以不同的方式进行这项工作 当这是我的代码时 se
  • symfony 每个块都有无空间

    我如何用无空间包装每个块代码以从我的 twig html 中裁剪空白 例如现在我有 block content div class box clearfix clearall div class ct colcontainer div cl
  • 在 R 中模拟不同初始条件的 ODE 模型

    我有一个模型 我想生成随机初始条件 运行模型并保存输出 以便每个模拟都是重复的 但我很难解释和实现循环 而且我也知道它们并不总是在 R 中最好使用 所以我很挣扎 我的最终目标是在 10 个不同的随机初始条件下迭代模拟 并保存 ODE 的输出
  • MySQL中如何查询某列的变化次数

    我有一个表存储具有两个属性的项目 所以该表有三列 item id property 1 property 2 insert time 1 10 100 2012 08 24 00 00 01 1 11 100 2012 08 24 00 0
  • 如何从命令行运行单个 gradle 任务

    在我的项目中 我的 build gradle 中有几个任务 我希望这些任务在运行时是独立的 即我需要从命令行运行单个任务 但是命令 gradle taskA 将同时运行我不想要的taskA和taskB 如何阻止任务正在运行 这是我正在做的事
  • boost.test 与 CppUnit

    我已经使用 CppUnit 一段时间了 并且对此感到满意 随着我们使用 boost 库的越来越多的部分 我对 boost test 进行了简短的了解 现在我想知道是否应该在新项目中切换到 boost test 这里有人能告诉我这两个框架之间
  • 哪个队列与 requestAnimationFrame 关联?

    今天我在接受采访时被问到这个问题 我无法回答这个问题 面试官说有一个特殊的队列用于 requestAnimationFrame 回调 但我找不到任何这方面的信息 如果 rAF 有它自己的队列 那么为什么这个队列从未在任何地方被提及 当我们谈
  • 任何免费的 UPC/条形码 DB [已关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 为什么 Windows 身份验证可以从本地到服务器工作,但不能从服务器到服务器工作?

    我有两个网站 A and B A使用一个 APIB暴露 并且B需要 Windows 身份验证 两个站点都位于域中D API 通过以下方式使用HttpClient 以及当站点A在我的域帐户下本地运行 位于 DomainP 访问被授予 在这种情