IIS 无法将 Windows 凭据传递到 SQL Server for ASP.NET Core 应用程序

2024-04-09

我在一家大公司工作,每个人都有 Intranet 和 Windows AD 登录。我们有许多内部 SQL Server 数据库,允许我们使用 Windows 身份验证登录,我正在尝试通过 ASP.NET Core 应用程序连接到其中一个数据库。我可以通过 SQL Server Management Studio 连接到该数据库并很好地查询表。

我已经按照教程进行了使用现有数据库的 ASP.NET Core 应用 https://learn.microsoft.com/en-us/ef/core/get-started/aspnetcore/existing-db尽可能接近,并创建一个模型类来测试,看看我是否可以从数据库中读取数据。在 Visual Studio 中使用 IIS Express 进行调试时,我可以在访问自动生成的控制器和视图时从数据库读取数据。

调试时一切似乎都很好,但是当发布到 IIS 时,我收到以下错误:

SqlException: Login failed for user '<DOMAIN>\<COMPUTERNAME>$'.

其中domain是我的域,computername是我的计算机的名称。这是预期的,因为我的计算机本身无法访问数据库。但它不应该尝试使用该系统帐户(带有美元符号)进行连接,它应该尝试与我的 Windows 帐户连接:<DOMAIN>\<USERNAME>.

更奇怪的是,这个应用程序does似乎以某种方式识别我的 Windows 凭据 - 当我访问主页时,我看到了熟悉的信息"Hello, <DOMAIN>\<USERNAME>!"导航栏中的消息。因此,Windows 凭据肯定会传递到应用程序,但由于某种原因在尝试通过 DbContext 连接到数据库时没有传递。

我在这里遗漏了一些明显的东西吗?

My Code

我从 Visual Studio 的 ASP.NET Core Web 应用程序模板开始。

在 launchSettings.json 中,我有:

  "iisSettings": {
    "windowsAuthentication": true, 
    "anonymousAuthentication": false, 
    "iisExpress": {
      "applicationUrl": "http://localhost:60686",
      "sslPort": 44336
    }
  },

在 appsettings.json 中,我有:

  "ConnectionStrings": {
    "MyDB": "Server=<servername>;Database=<dbname>;Trusted_Connection=True;"
  },

在 Startup.cs 中,我有以下行ConfigureServices

            services.AddDbContext<MyContext>(options => {
                options.UseSqlServer(Configuration.GetConnectionString("MyDB"));
            });

从那里,我使用实体框架搭建了一个带有视图的 MVC 控制器。

IIS 将 Windows 身份验证设置为“是”,将匿名身份验证设置为“否”。我的应用程序池通过 ApplicationPoolIdentity 设置为“无托管代码”。

编辑:问题

为了说明我试图解决的实际问题,我在远程 Intranet 服务器上有一个 SQL Server 数据库,该数据库允许通过 Windows 身份验证访问整个公司的子集。如果我想创建一个 ASP.NET 应用程序来向由 IIS 托管的数据库提供 API,那么最好的方法是什么?假设:

  1. 我不想自己管理权限或以某种方式复制它们
  2. 可以直接访问数据库的人应该可以访问 API,不能直接访问数据库的人则不能。
  3. 如果他们在登录 Windows 时从 Intranet 内访问它,则不必再次登录。

我以为我可以通过应用程序将他们的 Windows 凭据从 IIS 传递到 SQL Server,但我开始怀疑是否确实如此。


在详细了解 .NET 以及 Windows 身份验证在 IIS 上的实际作用后,我想说的是,不推荐我尝试做的事情。将 Windows 凭据传递给 .NET 应用程序以便从中读取数据与以该用户身份实际执行辅助进程之间存在差异。后一种情况是我想要做的,但应该使用可以登录数据库的用户在 IIS 中设置我的应用程序池,并使用 Windows 凭据来验证有权访问的用户列表。

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

IIS 无法将 Windows 凭据传递到 SQL Server for ASP.NET Core 应用程序 的相关文章

随机推荐

  • 在 Windows 窗体上显示 HTML 内容的最佳方式是什么?

    我想在我的应用程序中显示 HTML 格式的内容 最好是在 Web 浏览器控件内 我可以先创建一个 HTML 文档 然后将其加载到 Web 浏览器控件中 但这太笨拙了 有什么方法可以将包含 HTML 代码的字符串直接加载到 Web 浏览器中吗
  • 带有图像背景的 SVG 三角形分隔符

    好吧 我正在尝试创建一个 SVG 部分分隔符 它的工作原理是这样的 section section
  • Clojure 调用一系列函数并存储它们的返回值

    我正在构建一个数据模式 并且在我的脚下有以下内容clj定义和处理模式和初始数据的文件 每次调用下面调用的函数d transact defn recreate database To recreate db after running del
  • 我可以拥有多个 Spring Cloud 配置服务器吗?

    我知道我可以使用 1 个以上的存储库来跨多个存储库 可能针对每个应用程序 分发我的配置 但是 我可以为这些存储库运行 1 个以上的配置服务器吗 这样我们就可以避免 配置服务器 出现单点故障 如果我们可以运行多个配置服务器 我如何从访问任何一
  • 如何在Golang中创建kafka消费者组?

    可用的库是sarama https github com Shopify sarama 或其扩展萨拉玛簇 https github com bsm sarama cluster 但是没有提供消费者组示例 不在sarama https god
  • 提交具有自定义功能的加载项

    In this doc https learn microsoft com en us office dev add ins excel custom functions overview 其中提到 开发者预览版尚不支持以下功能 将加载项发
  • virtualenv 激活不起作用

    我正在尝试创建一个虚拟环境来测试 api 我可以使用以下方式创建环境virtualenv test 然后我可以 cd 进入它 当我尝试跑步时activate 我收到此错误 PS C Users Bright Bridge Desktop a
  • Log4j TimeBased 触发策略中 modulate = 'true' 表示什么

    在下面的示例中 每天都会创建一个日志文件 考虑到这个例子 您能否提供一个场景来展示 modulate true 的用法 并将间隔设置为 1
  • VC/C++ 裸属性有什么作用?

    来自msdn http msdn microsoft com en us library h5w10wxs aspx 对于用裸函数声明的函数 属性 编译器生成代码 没有序言和结尾代码 你 可以使用这个功能来编写自己的 prolog epil
  • Scrapy 是否可以从原始 HTML 数据中获取纯文本?

    例如 scrapy shell http scrapy org content hxs select id content extract 0 print content 然后 我得到以下原始 HTML 代码 div h2 Welcome
  • GrantPermissionCallable:权限:无法授予 android.permission.SET_TIME

    我正在尝试使用新的授予权限规则 https developer android com reference android support test rule GrantPermissionRule html这是最新支持库的一部分 在我的清
  • 在单个 matplotlib 图上嵌入多个 gridspec 布局?

    我正在使用 python 图形库 matplotlib 来绘制报告中的几项内容 我发现自己需要在较小图形的任意网格上方有几个固定计数的图形 我四处搜索 但找不到任何可以让我在单个 matplotlib 图上使用两个 gridspec 布局的
  • 我可以使用购买状态 API 来验证应用程序是否是通过 Play 商店购买的

    我有一个与我的后端通信的应用程序 我希望后端仅在用户通过游戏商店购买该应用程序并且没有窃取它时接受并响应 所以想法是 用户通过 Playstore 购买应用程序 应用程序通过服务器进行通信并发送使用该应用程序的用户的gmail地址 服务器询
  • Django 基于类的 DeleteView 示例

    有谁知道或有人可以制作一个 Django 基于类的通用 DeleteView 的简单示例吗 我想子类化 DeleteView 并确保当前登录的用户在删除该对象之前拥有该对象的所有权 任何帮助将非常感激 先感谢您 这是一个简单的 from d
  • FITS文件的坐标转换问题

    我已经在 python 中加载并绘制了一个 FITS 文件 在上一篇文章的帮助下 我成功地将轴从像素转换为天体坐标 但我无法正确地以毫角秒 mas 为单位获取它们 代码如下 import numpy as np import matplot
  • os.walk 在第一次找到后停止查找子目录

    我需要获取目录中第一次出现的repository config 文件并停止在子目录中查找 这是我的目录树 WAS80 base disk1 ad repository config WAS80 base disk1 md repositor
  • 在脚本中调用matlab脚本

    我有两个 matlab 脚本文件 m 不是函数文件 如果我想在当前脚本中调用另一个脚本 我应该使用哪个命令 谢谢 我找到了答案 只需在另一个脚本中命名该脚本即可 myOtherScript 如果您愿意 可以使用 run myOtherScr
  • WCF 客户端传递用户名令牌,并将 MustUnderstand 设置为 true

    我的任务是创建一个将由外部客户端使用的 WCF 服务 客户端使用 WSSE 安全性 具体来说 他们通过 SOAP 标头传递用户名令牌 WCF 服务托管在启用了 SSL 的 IIS 服务器上 至此 我已经有了一个半工作原型 我现在处理的问题是
  • 检测画布内的鼠标单击位置

    我在尝试定义一个单击空白区域的函数时遇到了一个真正的问题 到目前为止 我已经成功地定义了单击一个对象的位置 其中有 10 个 但现在我需要一个单独的函数 以便在不单击任何对象时使用 总体思路可以在以下位置找到 http deciballs
  • IIS 无法将 Windows 凭据传递到 SQL Server for ASP.NET Core 应用程序

    我在一家大公司工作 每个人都有 Intranet 和 Windows AD 登录 我们有许多内部 SQL Server 数据库 允许我们使用 Windows 身份验证登录 我正在尝试通过 ASP NET Core 应用程序连接到其中一个数据