【问题标题】:Using DefaultCredentials and DefaultNetworkCredentials使用 DefaultCredentials 和 DefaultNetworkCredentials
【发布时间】: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 授予访问权限的方式相同。但是,事实并非如此。或者至少,有些东西没有正确设置,无法正确验证。

所以,这里有一些问题:

  1. 我们在某处读到过“模拟用户”,我们是否需要在 Windows 服务 中的某处进行设置?

  2. 是否可以将 NetworkService 内置帐户的访问权限授予远程 IIS 服务器?

感谢阅读!

【问题讨论】:

    标签: web-services reporting-services credentials defaultnetworkcredentials


    【解决方案1】:

    您需要的所有详细信息都包含在this very old article

    简而言之,当您发现解决此类问题令人困惑时,您应该首先仔细查看 ASP.NET 模拟背后的技术细节。

    【讨论】:

    • 如果可能的话,能简单地写出问题的实际答案就好了,而不是在 MSDN 中放置 2 小时阅读文章的链接,并责怪其他人没有阅读它:)
    • @d.popov 总结核心内容对我来说确实是一个挑战。有兴趣的可以自己试试。不得不说这个问题的实际答案不会比那篇文章短。
    • 我也有类似的问题在这里解释stackoverflow.com/questions/38357792/…
    • @d.popov 他不知道答案是什么。人们投票赞成最奇怪的事情。
    • @LexLi “阅读手册”不是答案,正如您所知。
    【解决方案2】:

    您可以查看以下内容: - 为报告服务设置一个 SPN(服务主体名称);你可以在 google 中找到很好的例子; - 允许委托 (ClientCredentials.Windows.AllowImpersonationLevel)

    【讨论】:

      【解决方案3】:

      问题是您未能通过 IIS 身份验证,还是未能通过 SSRS 身份验证? DOMAIN\MachineName$ 帐户可能需要在 SSRS 中获得权限才能运行您尝试自动生成的报告。

      SSRS 通常在正确配置 IIS 方面做得很好,因此您不需要弄乱这些设置。我仔细检查了我的安装(即 SSRS 2005,SSRS 2000 中的工作方式可能有所不同,您没有说明您正在运行哪个版本),它设置为使用 Windows 身份验证并启用了模拟。这意味着 IIS 基本上应该只是验证您的凭据(验证正确的用户名/密码),而不是授权(确定该用户是否有权运行相关报告)。然后 IIS 将凭据传递给 SSRS,SSRS 有自己的设置来确定哪些帐户有权查看报告。

      此外,您可以直接在 SSRS 中按计划自动发送报告,因此如果您的计划非常基本(即每天、每周等),您可能根本不需要 Windows 服务。

      【讨论】:

        猜你喜欢
        • 2016-03-05
        • 1970-01-01
        • 1970-01-01
        • 2013-02-12
        • 1970-01-01
        • 2016-08-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多