WCF使用组合身份验证模式休息

时间:2013-04-03 14:54:17

标签: wcf rest authentication

我创建了一个自托管WCF RESTful服务,其基本http身份验证通过https运行,并带有自签名SSL证书。一切正常。用户通过Web浏览器访问服务操作。

问题是我的客户现在希望服务用户使用 BOTH 基本身份验证(用户名+密码)和证书进行身份验证。我无法做到这一点。

我已经看到在WCF 4.5中可以有多个身份验证方案。我已经调查了这一点但无济于事。

我也遇到了这个post(参见最后一个答案),但是当我尝试它时,我收到了这个错误:

“发生异常:HTTPS侦听器工厂配置为需要客户端证书和身份验证方案”基本“。一次只能要求一种身份验证形式。”

我的配置是在代码中完成的,这就是它的样子(这是可行的版本):

Uri baseAdress = new Uri("https://localhost:8446/"); 
WebServiceHost host = new WebServiceHost(typeof(RestService));
WebHttpBinding wb = new WebHttpBinding();
wb.Security.Mode = WebHttpSecurityMode.Transport;
wb.Security.Transport.ClientCredentialType = HttpClientCredentialType.Basic;
host.AddServiceEndpoint(typeof(IRestService), wb, baseAdress);
host.Credentials.UserNameAuthentication.CustomUserNamePasswordValidator = new CustomUserNameValidator();
host.Credentials.UserNameAuthentication.UserNamePasswordValidationMode = UserNamePasswordValidationMode.Custom;
host.Description.Endpoints[0].Behaviors.Add(new WebHttpBehavior { HelpEnabled = true });
host.Open(); 

感谢您的任何提示,

1 个答案:

答案 0 :(得分:0)

单个端点上的多重身份验证适用于Web托管方案(非自托管)。您可以在web主机中通过说clientCredentialType ='InheritFromHost'来配置它,并在vdir身份验证中设置要为该特定端点设置的所有auth方案。查看this文档,了解标题“多重身份验证支持”。

  
    

多种身份验证支持     在使用HTTP传输和传输安全性时,已添加支持以支持IIS在单个WCF端点上支持的多种身份验证模式。 IIS允许您在虚拟目录上启用多种身份验证模式,此功能允许单个WCF端点支持为托管WCF服务的虚拟目录启用的多种身份验证模式。