0

我有一个简单的 Web 服务,通过基于表单的身份验证来处理安全性。

WCFTestService.ServiceClient myService = new
          WCFTestService.ServiceClient();
myService.ClientCredentials.UserName.UserName = "user";
myService.ClientCredentials.UserName.Password = "secret";
lblResult.Text = myService.GetData(1231);
myService.Close();  

我正在通过网络应用程序访问它。所以我想做一次以上但为了安全/性能不必再做一次。我在想像下面这样的事情,但是当我使用 FormsAuthentication 时,这将不起作用...

//Obtain the authenticated user's Identity and impersonate the original caller
using (((WindowsIdentity)HttpContext.Current.User.Identity).Impersonate())
{
  WCFTestService.ServiceClient myService2 = new WCFTestService.ServiceClient();
  lblResult.Text = "From Logged On Credentials"+myService2.GetData(1231);
  myService2.Close();
}
4

1 回答 1

1

您要做的是在您的客户端和您的服务之间建立一个“安全会话”。这是一个仅适用于 wsHttpBinding 的概念 - 因此,如果您不使用该特定绑定,它将无法工作。

要建立安全会话,您需要在客户端和服务器的配置文件中设置一些特定的配置属性 - 您当然可以通过阅读文档(查找“建立安全上下文”)或查看 Michele Leroux Bustumante 的优秀 WCF截屏视频来找到这些设置关于 MSDN上的安全基础。

但实际上:我不建议尝试使用安全会话。在正常情况下,使用 per-call services 是首选选项,并且每次调用服务重新进行身份验证的开销可以忽略不计。

马克

于 2009-05-21T19:00:34.270 回答