【发布时间】:2009-06-29 14:29:06
【问题描述】:
我们很难弄清楚这些凭据对象是如何工作的。事实上,它们可能无法像我们预期的那样工作。这是对当前问题的解释。
我们有 2 台服务器需要通过 Web 服务相互通信。第一个(我们称之为Server01)有一个作为NetworkService 帐户运行的Windows 服务。另一个Server02 具有运行 IIS 6.0 的 ReportingServices。 Server01 上的 Windows 服务正在尝试使用 Server02 ReportingServices WebService 生成报告并通过电子邮件发送。
所以,这就是我们迄今为止所尝试的。
在运行时设置凭据(效果很好):
rs.Credentials = new NetworkCredentials("user", "pass", "domain");
现在,如果我们可以使用通用用户,一切都会好起来的,但是……我们不允许这样做。因此,我们尝试使用 DefaultCredentials 或 DefaultNetworkCredentials 并将其传递给 RS Webservice:
rs.Credentials = System.Net.CredentialCache.DefaultNetworkCredentials
或者:
rs.Credentials = System.Net.CredentialCache.DefaultCredentials
无论哪种方式都行不通。我们总是从 IIS 获得 401 Unauthrorized。现在,我们知道,如果我们想授予对记录为 NetworkService 的资源的访问权限,我们需要将其授予DOMAIN\MachineName$ (http://msdn.microsoft.com/en-us/library/ms998320.aspx):
授予对远程 SQL Server 的访问权限
如果您正在访问同一域(或受信任域)中另一台服务器上的数据库,则网络服务帐户的网络凭据用于对数据库进行身份验证。网络服务帐户的凭据格式为 DomainName\AspNetServer$,其中 DomainName 是 ASP.NET 服务器的域,AspNetServer 是您的 Web 服务器名称。
例如,如果您的 ASP.NET 应用程序在 CONTOSO 域中名为 SVR1 的服务器上运行,则 SQL Server 会看到来自 CONTOSO\SVR1$ 的数据库访问请求。
我们假设使用 IIS 授予访问权限的方式相同。但是,事实并非如此。或者至少,有些东西没有正确设置,无法正确验证。
所以,这里有一些问题:
-
我们在某处读到过“模拟用户”,我们是否需要在 Windows 服务 中的某处进行设置?
-
是否可以将 NetworkService 内置帐户的访问权限授予远程 IIS 服务器?
感谢阅读!
【问题讨论】:
标签: web-services reporting-services credentials defaultnetworkcredentials