我一直在挖掘WCF安全性,显然是徒劳地尝试创建一个服务/端点行为,允许我指定客户端用户名/密码凭据(但不认证它们,我很乐意使用内置的功能)。我的目的是在查询字符串中提供用户名(无密码)以供JSONP使用。
到目前为止,它只是让我的大脑漏出我的耳朵。有人能指出我正确的方向吗?
虽然我们在这里,但有人可以解释clientCredentials和serviceCredentials之间的区别吗?
我正在使用WCF和.NET 3.5 SP1。
编辑:我已经阅读了MSDN文章[如何:创建自定义客户端和服务凭据| http://msdn.microsoft.com/en-us/library/ms730868(VS.85).aspx],但它特别擅长向您展示要扩展的内容但不是责任每个都是。即使使用反射器,我也似乎无法找到哪个类/接口负责实际从请求中选择凭据(无论是来自HTTP头还是其他)。
编辑2:我想避免使用aspnet兼容性,因为会有一个命名管道绑定(使用传统的身份验证方法)。
编辑3:在有人想到它之前,我知道用户名:password@url.com格式,但在IE8中被禁用(至少)。它似乎被自动拒绝,即使包含在< script>中也是如此。在测试页面上标记。
答案 0 :(得分:3)
ClientCredentials 是客户端提供给服务的那些。 ServiceCredentials 是配置需要相互身份验证时服务提供给客户端的那些。
在服务方面:
WSHttpBinding b = new WSHttpBinding(SecurityMode.Transport);
b.Security.Transport.ClientCredentialType = HttpClientCredentialType.Basic;
在客户端:
proxy.ClientCredentials.UserName.UserName = "username";
proxy.ClientCredentials.UserName.Password = "password";
或强>
如果您正在使用BasicHttpBinding,请选择look at this。
此处 UserCredentialType UserName “表示客户端使用用户名凭据进行身份验证。”
或
Here is an example创建自定义用户名/密码验证程序。
我希望这里有所帮助。 : - )