阅读,观看视频,Google搜索,我对如何将WCF与使用带有MembershipProvider的表单身份验证的ASP.NET应用程序进行连接感到非常困惑。我已经看到了一个建议你使用专门的服务主机,这里解释(http://msdn.microsoft.com/en-us/library/bb398990.aspx] [1]):
<%@ ServiceHost Language="C#"
Service="System.Web.ApplicationServices.AuthenticationService" %>
我还看到了一个在ServiceFactory中执行它的实现:
ServiceHost serviceHost = new ServiceHost (typeof(MyServices), baseAddresses)
{
Credentials =
{
UserNameAuthentication =
{MembershipProvider = Membership.Provider}
},
Authorization =
{
PrincipalPermissionMode = PrincipalPermissionMode.UseAspNetRoles
}
};
serviceHost.Credentials.ServiceCertificate.SetCertificate(HttpContext.Current.Request.ServerVariables["HTTP_HOST"]);
这两种方法都让我感到困惑。对于第一个,我在哪里指定我的具体服务合同,如果我有多个服务怎么办?第二种方法更清晰。但是在这两种情况下,如果我尝试访问表单身份验证受保护的目录会发生什么,例如,mysite / admin / myservice.svc?安全机制是否会在服务和目录访问级别上启动?如果您想使用两个不同的成员资格提供程序,一个用于文件访问而另一个用于实际的WCF服务,该怎么办?这不是一个不寻常的情况。
任何帮助都会很棒,感到茫然和困惑。
答案 0 :(得分:1)
WCF的优点在于,这可以在web.config中完成,也可以通过代码隐藏(根据您的喜好)来完成。 WCF的身份验证在行为中处理。我发现使用web.config更容易绑定。以下是服务器配置外观的快速示例。
<system.serviceModel>
<bindings>
<wsHttpBinding> <!-- required since BasicHttpBinding has no security model -->
<binding name="FormsAuthProvider">
<security mode="Message">
<message clientCredentialType="UserName" negotiateServiceCredentials="true"/>
</security>
</binding>
</wsHttpBinding>
</bindings>
<behaviors>
<serviceBehaviors>
<behavior name="FormsAuthProvider">
<serviceCredentials>
<usernameAuthetication userNamePasswordValidationMode="MembershipProvider" membershipProviderName="formsProvider"/>
</serviceCredentials>
</behavior>
</serviceBehaviors>
</behaviors>
</system.serviceModel>
<system.web>
<membership>
<providers>
<add name="formsProvider" type="..."/>
</providers>
</membership>
</system.web>
此示例配置适用于邮件安全性 - 而非传输安全性(安全模式)。如果您在服务本身上具有目录安全性,则需要在使用服务端点之前对其进行身份验证。
由于某种原因,MSDN没有将此选项列为常见安全方案。