Windows 身份验证不适用于带有 ASP.NET Core 的 IIS

2023-12-06

我正在尝试对 ASP.NET Core MVC 应用程序使用 Windows 身份验证。 以下是问题陈述。

当应用程序使用 IISExpress 运行时,它运行没有任何问题。但是,当它在 IIS 中配置为站点并运行时,它会提示输入凭据,甚至在输入更正的凭据后,应用程序也会显示状态为 401 的错误页面。

细节: 应用程序是一个启用了 Windows 身份验证的普通样板 ASP.NET Core MVC 应用程序。我正在尝试寻找在实际应用中使用的解决方案。

框架:.NET Core 2.2

环境:具有 IIS 10.0 的 Windows Server 2019 计算机上的 Visual Studio 2019

以下是我在样板应用程序中所做的更改。 更改 Startup.cs 文件以使用身份验证。

public void ConfigureServices(IServiceCollection services)
{
    services.Configure<CookiePolicyOptions>(options =>
        {
            // This lambda determines whether user consent for non-essential cookies is needed for a given request.
            options.CheckConsentNeeded = context => true;
            options.MinimumSameSitePolicy = SameSiteMode.None;
        });

        services.Configure<IISOptions>(options =>
        {
            options.AutomaticAuthentication = true;
        });

        services.AddAuthentication(IISDefaults.AuthenticationScheme);

        services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
}

添加了以下代码行ConfigureStartup.cs 文件中的方法。

app.UseAuthentication();

在项目属性中启用 Windows 身份验证进行调试,并使用 OutProcess 托管模型配置 IIS 托管。

[Screen capture of Web project properties]

将应用程序配置为 IIS 中的网站,并启用 Windows 身份验证。

[Screen capture of IIS]

我尝试过的事情。

  1. 尝试添加forwardWindowsAuthToken="true"在 web.config 文件中。
  2. Tried adding the site in Local Intranet sites in Internet options of browser. [Screen Capture of Local Intranet sites]
  3. 尝试使用UseIIS()在 WebHostBuilder 的 Program.cs 中。

来自我尝试过的 StackOverflow 问题的建议。

Asp.Net core MVC 应用程序 IIS 中的 Windows 身份验证

ASP.Net Core:保留Windows身份验证

Asp.Net Core Windows 身份验证在 IIS 中不起作用

如果我在 IIS 和应用程序上都启用了 Windows 身份验证,则应用程序在浏览时会提示输入凭据。即使输入当前凭据后,它也不会通过并重新提示。尝试 3 次后,应用程序显示带有 401 错误的错误页面。

我相信如果我的应用程序提示输入凭据,配置是正确的,但我无法理解为什么即使在提供正确的凭据后它也不接受用户登录。

注意:所有活动、开发、调试、托管等都发生在同一台 Windows 2019 服务器计算机上。该计算机也托管域控制器,并尝试使用有效域用户之一登录。

我现在完全一无所知,我尝试的任何事情最终都会导致同样的问题。 请随时询问是否需要更多详细信息。

编辑1 ----------------------------------------------------------

我在 IIS 上使用端口 8081 且未绑定名称配置站点时几乎没有成功。

enter image description here

这样,当我浏览 http://localhost:8081 时,它会毫无问题地登录当前用户。但是当我使用任何绑定名称配置它时,例如sample.localapp.com它开始提示输入凭据,但从不接受它。

提前致谢。


我在 Windows 10 上遇到了同样的问题。解决方案在对所描述问题的第一条评论中有详细说明here

  1. 打开注册表编辑器
  2. 导航到 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa\MSV1_0
  3. 右键单击 MSV1_0 并创建一个名为 BackConnectionHostNames 的新多字符串值
  4. 双击 BackConnectionHostNames 并输入本地站点的 DNS 名称。
  5. 重新启动计算机。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Windows 身份验证不适用于带有 ASP.NET Core 的 IIS 的相关文章

  • 使用 C# 登录《我的世界》

    我正在尝试为自己和一些朋友创建一个简单的自定义 Minecraft 启动器 我不需要启动 Minecraft 的代码 只需要登录的实际代码行 例如 据我所知 您过去可以使用 string netResponse httpGET https
  • C++ 是否可以在 MacOS 上与 OpenMP 和 boost 兼容?

    我现在已经尝试了很多事情并得出了一些结论 也许 我监督了一些事情 但似乎我无法完成我想要的事情 问题是 是否有可能使用 OpenMP 和 boost 在 MacOS High Sierra 上编译 C 一些发现 如果我错了请纠正我 Open
  • 发送 POST 请求时 JSON 原语无效

    我有以下 ajax 请求 其中我尝试将 JSON 对象发送到服务器 function sendData subscriptionJson ajax type POST url Url Action SubscribeSecurities S
  • JNI 将 Char* 2D 数组传递给 JAVA 代码

    我想从 C 代码通过 JNI 层传递以下指针数组 char result MAXTEST MAXRESPONSE 12 12 8 3 29 70 5 2 42 42 在java代码中我写了以下声明 public static native
  • 如何使用 Castle Windsor 将对象注入到 WCF IErrorHandler 实现中?

    我正在使用 WCF 开发一组服务 该应用程序正在使用 Castle Windsor 进行依赖注入 我添加了一个IErrorHandler通过属性添加到服务的实现 到目前为止一切正常 这IErrorHandler对象 一个名为FaultHan
  • 为什么在 WebApi 上下文中在 using 块中使用 HttpClient 是错误的?

    那么 问题是为什么在 using 块中使用 HttpClient 是错误的 但在 WebApi 上下文中呢 我一直在读这篇文章不要阻止异步代码 https blog stephencleary com 2012 07 dont block
  • 查看 NuGet 包依赖关系层次结构

    有没有一种方法 文本或图形 来查看 NuGet 包之间的依赖关系层次结构 如果您使用的是新的 csproj 您可以在此处获取所有依赖项 在项目构建后 项目目录 obj project assets json
  • unordered_map 中字符串的 C++ 哈希函数

    看起来 C 标准库中没有字符串的哈希函数 这是真的 在任何 c 编译器上使用字符串作为 unordered map 中的键的工作示例是什么 C STL提供模板专业化 http en cppreference com w cpp string
  • 对 std::vector 进行排序但忽略某个数字

    我有一个std vector
  • 如何在编辑器模板中获取序列/数组索引?

    案件 我有一个使用 X 类编辑器模板显示的 X 类项目列表 问题 如何获取编辑器模板内部正在处理的项目的索引 我一直在使用这个 HtmlExtension 它只返回迭代所需的 id 它基本上是一个正则表达式ViewData Template
  • 识别 Visual Studio 中的重载运算符 (c++)

    有没有办法使用 Visual Studio 快速直观地识别 C 中的重载运算符 在我看来 C 中的一大问题是不知道您正在使用的运算符是否已重载 Visual Studio 或某些第三方工具中是否有某些功能可以自动突出显示重载运算符或对重载运
  • C++ int 前面加 0 会改变整个值

    我有一个非常奇怪的问题 如果我像这样声明一个 int int time 0110 然后将其显示到控制台返回的值为72 但是当我删除前面的 0 时int time 110 然后控制台显示110正如预期的那样 我想知道两件事 首先 为什么它在
  • 检测到严重错误 c0000374 - C++ dll 将已分配内存的指针返回到 C#

    我有一个 c dll 它为我的主 c 应用程序提供一些功能 在这里 我尝试读取一个文件 将其加载到内存 然后返回一些信息 例如加载数据的指针和内存块的计数到 c Dll 成功将文件读取到内存 但在返回主应用程序时 程序由于堆损坏而崩溃 检测
  • 在屏幕上获取字符

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

    我的一个类有一个 Guid 类型的属性 该属性可以由多个线程同时读写 我的印象是对 Guid 的读取和写入不是原子的 因此我应该锁定它们 我选择这样做 public Guid TestKey get lock testKeyLock ret
  • WebBrowser.Print() 等待完成。 。网

    我在 VB NET 中使用 WebBrowser 控件并调用 Print 方法 我正在使用 PDF 打印机进行打印 当调用 Print 时 它不会立即启动 它会等到完成整个子或块的运行代码 我需要确保我正在打印的文件也完整并继续处理该文件
  • 这个可变参数模板示例有什么问题?

    基类是 include
  • 可访问性不一致:参数类型的可访问性低于方法

    我试图在两个表单之间传递一个对象 基本上是对当前登录用户的引用 目前 我在登录表单中有一些类似的内容 private ACTInterface oActInterface public void button1 Click object s
  • 我可以在“字节数”设置为零的情况下调用 memcpy() 和 memmove() 吗?

    当我实际上没有什么可以移动 复制的时候 我是否需要处理这些情况memmove memcpy 作为边缘情况 int numberOfBytes if numberOfBytes 0 memmove dest source numberOfBy
  • 为boost python编译的.so找不到模块

    我正在尝试将 C 代码包装到 python 中 只需一个类即可导出两个函数 我编译为map so 当我尝试时import map得到像噪音一样的错误 Traceback most recent call last File

随机推荐