【发布时间】:2012-09-21 14:03:51
【问题描述】:
我使用 Asp.net WebAPI 开发了一个 Restful web 服务,并在 web.config 文件中使用了 windows 身份验证。此 WebService 由内部网络中的内部 windows 应用程序调用。现在的问题是当我发送请求时 IE 浏览器对 webService 的身份验证和授权工作正常。 但是当我通过寡妇应用程序发送请求时,用户没有经过身份验证。 设想 : 当我使用以下配置时,来自网络浏览器的请求已正确验证,但来自 Windows 应用程序的请求未经过验证,即使用户位于具有正确角色的正确 AD 组中。
<authentication mode="Windows"/>
<authorization>
<allow roles = "someGroup1"/>
<allow roles = "Somegroup2"/>
<deny users="*" />
</authorization>
可能是什么问题,请提供任何建议。
【问题讨论】:
-
您可能需要确认客户端应用程序正在您期望的用户上下文中运行。例如,如果请求来自 Web 服务,则用户帐户将与当前登录的用户不匹配。
-
这是更改代码还是更改 Windows 应用程序中的设置。如果您能提供有关这方面的任何细节,我将不胜感激。谢谢
-
通常两者都没有。代码可以模拟不同的用户,但大多数时候它只与应用程序的运行方式有关。 Windows 服务和 Web 服务通常在系统帐户下运行。普通的 winforms 应用程序通常会以当前登录的用户身份运行。
-
是的 Windows 应用程序正在以当前登录的用户身份运行。但是为什么身份验证在 IE 浏览器的情况下有效,而不是 Windows。有什么方法可以记录通过 Windows 应用程序和浏览器访问 Web 服务的用户。
-
我发现了问题,Windows 客户端没有将用户信息发送到 Web 主机,因此身份验证和授权失败。由于我使用的是 NTML 身份验证,因此要解决此问题,我必须向 restClient 添加一个身份验证器,如下所示:client.Authenticator = new NtlmAuthenticator();
标签: asp.net-mvc-3 asp.net-web-api windows-authentication