这两行web.config代码之间有什么区别 1。
<identity impersonate="true" />
2
<identity impersonate="true" userName="MyUserName" password="MyPassword"/>
MyuserName和MyPassword是我的Windows凭据。如果你有IIS设置使用Windows凭据不应该“1”。传递我的Windows凭据,因此与“2”相同?
当我在尝试连接到我的WCF服务时使用“1”并出现身份验证错误时,我的应用程序正在死亡。我的服务中的代码显然没有任何问题,并且将我的服务称为“2”的代码工作正常,并将客户端凭据传递给我的WCF服务。
网站的IIS配置是为Windows身份验证设置的,其运行的用户是可信任的。
那么如何在没有硬编码的情况下通过我的Windows凭证?
答案 0 :(得分:6)
您所看到的是授权问题。如果你使用
<identity impersonate="true" />
然后会发生什么是您的ASP.NET页面将在登录用户的凭据下运行(假设Windows身份验证)。但是,这些凭据不会传递到应用程序之外的任何调用,例如与SQL的连接或与WCF服务的连接。您需要使用传递给ASP.NET的凭据,然后在调用Web服务之前使用模拟;
using (((WindowsIdentity)HttpContext.Current.User.Identity).Impersonate())
{
WCFTestService.ServiceClient myService = new WCFTestService.ServiceClient();
Response.Write(myService.GetData(123) + "<br/>");
myService.Close();
}
WCF Security Patterns and Practices网站上有更多详细信息。
答案 1 :(得分:5)
如果您阅读有关ASP.NET identity impersonation的MSDN页面,您会注意到如果<identity>
元素不包含凭据,ASP.NET将模拟IIS传递给它的令牌,可以是请求身份验证用户的身份或匿名Internet用户帐户(IUSR_machinename)。在我看来,在上面的场景1.中,ASP.NET正在获取匿名用户令牌,这将解释失败。您可以尝试禁用对Web服务的匿名访问,以强制启动WIndows身份验证。