【问题标题】:Write files to network drive from IIS using Managed Service Account使用托管服务帐户将文件从 IIS 写入网络驱动器
【发布时间】:2019-05-15 22:26:57
【问题描述】:

我有一个托管在 Windows 2016 上的 IIS 10 中的 ASP.NET MVC 5 应用程序。我们的系统管理员创建了一个托管服务帐户 (MSA),该帐户与此服务器相关联,并且对网络上的文件夹具有读/写权限.我需要使用 MSA 从 Web 应用程序将 PDF 写入该文件夹。

目前,我只是想将一个简单的文本文件写入文件夹:

System.IO.File.WriteAllText(@"\\SomeUncPath\Reports\test.txt", "sample text");

上面会产生这个错误,这是意料之中的,

System.UnauthorizedAccessException:对路径“\SomeUncPath\Reports\test.txt”的访问被拒绝。

我关注了这个视频:https://www.youtube.com/watch?v=lBv81lwZgIo 无济于事。它只是导致网站生成 503 错误。

是否可以使用 C# 模拟来编写文件,例如 this article 中所述?但是,您如何模拟 MSA,其密码由系统设置?

我使用SimpleImpersonation 尝试了以下代码:

var cred = new UserCredentials("myDomain", "someMsa$", "");
Impersonation.RunAsUser(cred, LogonType.Batch, () =>
    {
        System.IO.File.WriteAllText(@"\\SomeUncPath\Reports", "sample text");
    }
);

上面抛出这个:

System.ArgumentException:密码不能为空或仅由空格字符组成。参数名称:密码

更新 1: 服务器将以下错误抛出到系统日志中:

应用程序池 SomePool 已被禁用。 Windows Process Activation Service (WAS) 在启动工作进程为应用程序池提供服务时遇到故障。

还有这两个警告:

应用程序池 SomePool 已被禁用。 Windows Process Activation Service (WAS) 未创建工作进程来为应用程序池提供服务,因为应用程序池标识无效。

应用程序池 SomePool 的标识无效。为标识指定的用户名或密码可能不正确,或者用户可能没有批量登录权限。如果没有更正身份,当应用程序池收到第一个请求时,应用程序池将被禁用。如果批处理登录权限导致问题,则必须在授予权限后更改 IIS 配置存储中的标识,然后 Windows Process Activation Service (WAS) 才能重试登录。如果在处理应用程序池的第一个请求后身份仍然无效,则应用程序池将被禁用。数据字段包含错误号。

我尝试了this 并重新启动了服务器,但问题仍然存在。

更新 2:如果我向应用程序池提供我的凭据,则应用程序加载时不会出现任何问题。只有在 MSA 上才会出现上述错误/警告。 MSA 有什么问题?

更新 3: 问题在于我如何将 MSA 添加到应用程序池中。我需要在用户名中包含我的域:myDomain\someMsa$。一旦我把它放进去,它就像一个魅力!

【问题讨论】:

  • 错误似乎很明显 - 您没有为 SomePool 提供 MSA 的正确密码。
  • 谢谢,@NetMage。发现问题:将 MSA 作为其身份添加到应用程序池时,我没有添加“myDomain”。一旦它在那里,它就很高兴。
  • 不要将您的解决方案作为更新发布,而是将其作为答案发布并接受。
  • 谢谢,@LexLi。回到办公室我会回答的。

标签: c# asp.net-mvc permissions impersonation


【解决方案1】:

问题与将 MSA 设置为应用程序池标识时缺少域有关。添加时,我需要将其设置为myDomain\someMsa$ 而不是简单的someMsa$。奇怪的是 IIS 没有给出错误,可能是因为 MSA 帐户被认为是本地帐户和域帐户。

另外,在我们的例子中,我们不需要 MSA 的“批量登录”权限。没有它它工作得很好。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-05-27
    • 1970-01-01
    • 2015-01-07
    • 1970-01-01
    • 1970-01-01
    • 2016-08-11
    • 2011-05-25
    相关资源
    最近更新 更多