1

请注意:在下面我描述的每个步骤中,我都以相同的域用户帐户登录。

我有一个 Web 应用程序可以控制远程机器上的服务(通过ServiceController)。当我远程连接到网站并尝试控制服务时,我收到 InvalidOperationException: Access is denied。

我知道它可以工作,因为当我从 Web 服务器连接到网站时(远程桌面进入,以我的域用户身份登录,然后打开网页),它按预期工作。

我已将 IIS 和 ASP.NET 配置为需要 Windows 身份验证和模拟。当此操作失败时,我会记录当前线程的主体,并且无论我是远程连接还是从服务器本身连接,我都会看到该线程以我的身份运行。

我曾尝试强制 IIS 同时使用 Kerberos 身份验证、NTLM 身份验证和两者;我的委托人将其 AuthenticationType 报告为“协商”还是“NTLM”都没有关系。当我远程连接(从我的本地机器)时,它们都不起作用

另一个奇怪的事情是,如果我从本地机器调试/连接到远程服务器,它每次都能正常工作!但我不是在调试,每次都失败!

这里到底发生了什么?

4

2 回答 2

1

您的方案是委托而不是模拟。授权很难实现,它取决于许多事情是否正确。

一个开始的地方是Kerberos 身份验证和故障排除委派问题

David Wang 博客是关于这些问题的非常有用的资源。

于 2008-11-26T20:16:23.903 回答
0

“另一个奇怪的事情是,如果我从本地机器调试/连接到远程服务器,它每次都能正常工作!但我不是在调试,它每次都失败!”

这清楚地表明您有权限问题。当您在调试器中运行时,您以登录用户身份运行,当您不调试时,它以任何 IIS 设置使用的方式运行(默认为网络服务)。尝试设置(暂时!)使用您的域帐户作为用户启用匿名访问,看看是否有效。如果是这样,则意味着您的 IIS 没有正确设置来模拟(并且它可能作为 NETWORK SERVICE 运行)。

IIS 中的权限可能有点难以正确微调......祝你好运!

P/S:这看起来更像是一个网络管理问题而不是一个编程问题(参见https://stackoverflow.com/questions/321618/stackoverflow-is-for-programming-questions-here-are-some-better-forums-为你的#321756 )

于 2008-11-26T20:01:48.723 回答