Я хочу проверять подлинность пользователей службы WCF с помощью настраиваемых поставщиков членства и ролей, но не хочу защищать трафик между ними с помощью сертификата.
Можно ли использовать basicHttpBinding, передавая пользовательскиеучетные данные без сертификата?
Я спрашиваю, потому что у меня есть служба WCF со всеми подключениями поставщика членства и т. д., подключенными через конфигурацию и размещенными в IIS, но сведения о пользователе не передаются в IIS.
У меня есть WAN, где сеть безопасна, поэтому меня не беспокоит шифрование сообщений.
Включена совместимость с ASP.Net, конфигурация указана ниже.Это все .Net 4.0;
<?xml version="1.0"?>
<configuration>
<system.web>
<compilation debug="true" targetFramework="4.0" />
<membership defaultProvider="DemoMembershipProvider" userIsOnlineTimeWindow="15">
<providers>
<clear />
<add name="DemoMembershipProvider" type="DemoMembershipProvider" connectionStringName="SqlConn" applicationName="TestProvider" enablePasswordRetrieval="false" enablePasswordReset="false" requiresQuestionAndAnswer="false" requiresUniqueEmail="true" passwordFormat="Clear" />
</providers>
</membership>
<roleManager enabled="true" defaultProvider="DemoRoleProvider" >
<providers>
<clear/>
<add name="DemoRoleProvider" connectionStringName="blah" applicationName="TestProvider" type="DemoRoleProvider" />
</providers>
</roleManager>
<customErrors mode="Off" />
</system.web>
<system.serviceModel>
<services>
<service name="DataService">
<endpoint address="" binding="basicHttpBinding" bindingConfiguration="BindingConfiguration" contract="IDataService" />
<endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
</service>
</services>
<bindings>
<basicHttpBinding>
<binding name="BindingConfiguration">
<security mode="None">
<message clientCredentialType="UserName"/>
</security>
</binding>
</basicHttpBinding>
</bindings>
<behaviors>
<serviceBehaviors>
<behavior>
<serviceMetadata httpGetEnabled="true" />
<serviceDebug includeExceptionDetailInFaults="true" />
<serviceCredentials>
<userNameAuthentication userNamePasswordValidationMode="MembershipProvider" membershipProviderName="DemoMembershipProvider" />
</serviceCredentials>
<serviceAuthorization principalPermissionMode="UseAspNetRoles" roleProviderName="DemoRoleProvider" />
</behavior>
</serviceBehaviors>
</behaviors>
<serviceHostingEnvironment multipleSiteBindingsEnabled="true" aspNetCompatibilityEnabled="true" />
</system.serviceModel>
<system.webServer>
<modules runAllManagedModulesForAllRequests="true"/>
</system.webServer>
</configuration>
Код клиента:
Console.WriteLine("Calling with valid credentials");
using (var y = new DataServiceRef.DataServiceClient())
{
y.ClientCredentials.UserName.UserName = "ryan";
y.ClientCredentials.UserName.Password = "password";
Console.WriteLine("Result: {0}", y.GetData("blah"));
}