首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >IIS未能将windows凭据传递给ASP.NET核心应用程序的Server

IIS未能将windows凭据传递给ASP.NET核心应用程序的Server
EN

Stack Overflow用户
提问于 2019-01-22 22:56:48
回答 4查看 6.9K关注 0票数 4

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

我尽可能地密切关注使用现有数据库的ASP.NET核心应用程序的教程,并创建了一个模型类来测试是否可以从数据库读取数据。在Visual中使用IIS Express进行调试时,我可以在访问自动生成的控制器和视图时从数据库读取数据。

调试时一切看起来都很好,但是当发布到IIS时,我会收到以下错误:

代码语言:javascript
运行
复制
SqlException: Login failed for user '<DOMAIN>\<COMPUTERNAME>$'.

其中域名是我的域名,计算机名是我的计算机名称。这是预料中的,因为我的计算机本身没有访问数据库的权限。但是它不应该试图使用这个系统帐户(用美元符号)连接,它应该尝试连接到我的windows帐户:<DOMAIN>\<USERNAME>

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

我是不是漏掉了什么明显的东西?

我的密码

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

在launchSettings.json中,我有:

代码语言:javascript
运行
复制
  "iisSettings": {
    "windowsAuthentication": true, 
    "anonymousAuthentication": false, 
    "iisExpress": {
      "applicationUrl": "http://localhost:60686",
      "sslPort": 44336
    }
  },

在appsettings.json中,我有:

代码语言:javascript
运行
复制
  "ConnectionStrings": {
    "MyDB": "Server=<servername>;Database=<dbname>;Trusted_Connection=True;"
  },

在Startup.cs中,我在ConfigureServices中有下面一行

代码语言:javascript
运行
复制
            services.AddDbContext<MyContext>(options => {
                options.UseSqlServer(Configuration.GetConnectionString("MyDB"));
            });

然后,我使用实体框架为一个具有视图的MVC控制器搭建了支架。

IIS的Windows身份验证设置为“是”,而匿名身份验证设置为“否”。我的应用程序池被设置为没有使用ApplicationPoolIdentity的托管代码。

编辑:问题

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

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

我以为我可以通过应用程序将他们的windows凭据从IIS传递到SQL server,但我开始怀疑是否真的是这样。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2019-01-25 17:26:45

在了解了更多关于.NET的信息以及Windows在IIS上实际做了什么之后,我要说的是,我试图做的事情是不推荐的。将windows凭据传递给.NET应用程序以进行读取与以用户身份实际执行辅助进程是有区别的。后一种情况是我试图做的事情,但是应该在IIS中设置我的应用程序池,让用户能够登录到数据库,并使用windows凭据来验证具有访问权限的用户列表。

票数 2
EN

Stack Overflow用户

发布于 2019-01-23 08:48:37

SqlServer使用的是实体框架,EF使用的是ADO.NET SqlClient。因此,Trusted_Connection=yes;不能工作。

添加Integrated Security=true;代替,它应该是固定的。

下面是一些关于it的参考资料,https://learn.microsoft.com/en-us/dotnet/framework/data/adonet/connection-string-syntax

票数 1
EN

Stack Overflow用户

发布于 2019-05-08 15:13:34

不是为了挖掘一个旧线程,而是一个函数,只要设置了标识模拟= True,这个函数就可以工作。这是一些正在处理的东西。

GitHub医生

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54317661

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档