我有一个简单的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();
}
答案 0 :(得分:1)
您要做的是在客户端和服务之间建立“安全会话”。这个概念只适用于wsHttpBinding - 所以如果你没有使用那个特定的绑定,它将无法工作。
要建立安全会话,您需要在客户端和服务器的配置文件中设置一些特定的配置属性 - 您当然可以通过阅读文档找到这些设置(查找“establishSecurityContext”)或查看Michele Leroux Bustumante的MSDN上的优秀WCF screencast on security fundamentals。
但实际上:我不建议尝试使用安全会话。在正常情况下,使用每个呼叫服务是首选选项,并且每个服务调用重新进行身份验证的开销实际上是可以忽略不计的。
马克