c# - WCF 和 <identity impersonate ="true"/>

标签 c# .net asp.net wcf

这两行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 身份验证设置的,它运行的用户是受信任的委托(delegate)。

那么如何在不对它们进行硬编码的情况下通过我的 Windows 凭据呢?

最佳答案

您看到的是委派问题。如果你使用

<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 的更多详细信息网站。

关于c# - WCF 和 <identity impersonate ="true"/>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1360322/

相关文章:

c# - 使用 Entity Framework 和 MYSQL 自动创建表(代码优先)

c# 防止自定义组合框自动选择项目

c# - 什么是 async 和 await,什么时候在 Windows 开发中使用它们?

c# - 在 Entity Core 中调用存储过程时创建新的 DbContext 还是使用注入(inject)的 DbContext?

javascript - 从 Javascript 分配 Session 变量

c# - 如何使用 javascript 获取 HiddenField 值

c# - Roslyn/CSharpScript - 如何保存/加载编译以避免编译等待时间

c# - 我可以使用 for 循环等待网络浏览器完成导航吗?

c# - 解码百分比编码的字符串 c# .net

c# - 如何从 IntelliSense 隐藏公共(public)方法