asp.net – 为什么IIS中的Windows /集成身份验证不会将用户凭据传递给SSRS和SQL?

问题:
在ASP.NET 4.0中,我使用SSRS 2005服务器的ReportService2005.asmx Web服务来获取报告列表.同样在.NET中,我使用Entity Framework与我的MS-SQL 2005数据库进行通信.当我使用Visual Studio Development Server作为我的Web服务器时,对SSRS和SQL的调用工作正常.但是当我切换到IIS 5.1时,SSRS和实体代码都会产生错误.我在IIS中仅使用Windows /集成身份验证.

错误:
对于SSRS,我得到请求失败,HTTP状态401:未经授权.

对于Entity Framework,我的用户”登录失败.用户未与受信任的SQL Server连接关联.

尝试的解决方案:
在Web.Config中,我添加了< identity impersonate =“true”/>并修复了实体框架错误,但没有修复SSRS错误.我扩展了身份参考以包含我的用户名和密码,并修复了所有错误.

题:
为什么指定我的用户名和密码来修复错误,为什么SQL说我没有指定用户名(”)?我以为Windows身份验证会自动模仿当前用户.如何在不将“服务”帐户硬编码到web.config中的情况下解决此问题?

解决方法

Windows或集成身份验证意味着使用Windows凭据(或令牌)标识用户,但这并不意味着该请求在该用户下运行. ASP.NET运行时将在工作进程(App Pool)标识下执行请求,除非您将其配置为模拟其他一些标识.

因此,当您使用开发服务器访问该站点时,服务器以您的身份运行,因此可以根据您的身份访问SSRS和Sql Server,并且它可以正常运行.

在IIS下加载站点时,ASP.NET请求将在为应用程序池配置的任何标识下运行.通常,此标识是本地用户,因此将拒绝访问SSRS或Sql Server等网络资源.添加< identity impersonate =“true”username =“your name”../\u0026gt ;,ASP.NET将以您的身份运行请求,这应该适用于SSRS和Sql Server. 这里奇怪的情况是< identity impersonate =“true”/> – 在此设置下,ASP.NET将模拟当前经过身份验证的Windows身份.但是,为了使其正常工作,您在集成身份验证上配置了IIS和ASP.NET,并拒绝匿名访问(在ASP.NET和IIS中).如果不这样做可能会导致无法验证当前用户的身份,并且请求将以匿名用户的身份(在IIS中配置)运行.如果您在IIS中标记了集成身份验证,但在ASP.NET中没有标记,则身份将不会传递给ASP.NET请求.您需要检查您的环境以查看您遇到的确切方案,但最终结果是您的ASP.NET请求在可以访问SQL Server而不是SSRS的凭据下运行.

相关文章

引言 本文从Linux小白的视角, 在CentOS 7.x服务器上搭建一个...
引言: 多线程编程/异步编程非常复杂,有很多概念和工具需要...
一. 宏观概念 ASP.NET Core Middleware是在应用程序处理管道...
背景 在.Net和C#中运行异步代码相当简单,因为我们有时候需要...
HTTP基本认证 在HTTP中,HTTP基本认证(Basic Authenticatio...
1.Linq 执行多列排序 OrderBy的意义是按照指定顺序排序,连续...