我们目前有一个Silverlight 5 Out-of-browser应用程序,它调用了许多WCF Web服务。
我希望使用摘要式身份验证来保护这些服务,但是我无法让Silverlight真正提交凭据。
// step one - find and remove default endpoint behavior
var defaultCredentials = channelFactory.Endpoint.Behaviors.Find<ClientCredentials>();
channelFactory.Endpoint.Behaviors.Remove(defaultCredentials);
// step two - instantiate your credentials
ClientCredentials loginCredentials = new ClientCredentials();
loginCredentials.UserName.UserName = "myusername";
loginCredentials.UserName.Password = "mypassword";
// step three - set that as new endpoint behavior on factory
channelFactory.Endpoint.Behaviors.Add(loginCredentials); //add required ones
当我使用此代码时,客户端首先发出匿名请求,服务器响应401结果代码,然后Silverlight会提示我输入凭据。
在应用程序的其他部分,我对Rest服务进行WebRequest,在这种情况下,我可以提供摘要式身份验证的凭据,并且它可以正常工作。
更奇怪的是,如果我首先使用凭据创建WebRequest,Silverlight似乎会缓存这些凭据并将其用于WCF调用。但几秒钟后,这些凭据变为无效,随后的WCF调用再次出现提示。
有没有办法在Silverlight 5中使用WCF进行摘要式身份验证?