Если вы хотите использовать SSL, вам нужно будет использовать сертификаты X509.
Если вы собираетесь разместить его на IIS и включить SSL, вам потребуется предоставить сертификат, для целей отладки вы можете сгенерироватьсамозаверяющий сертификат из IIS.
После того, как вы настроите его в IIS, вам потребуется отредактировать привязку WCF, чтобы включить SSL.
Вам понадобится привязка с транспортным набором режима безопасности.
<basicHttpBinding>
<binding name="SecureBinding" receiveTimeout="01:00:00">
<security mode="Transport" />
</binding>
</basicHttpBinding>
и безопасное поведение, следующее указывает сертификат ssl, который будет использоваться.
<behaviors>
<serviceBehaviors>
<behavior name="SecureBehavior">
<serviceMetadata />
<serviceCredentials>
<serviceCertificate findValue="localhost" storeLocation="LocalMachine" storeName="My" x509FindType="FindBySubjectName" />
</serviceCredentials>
</behavior>
<behavior name="StandardBehavior">
</behavior>
</serviceBehaviors>
</behaviors>
, вам необходимо создать защищенную конечную точку
<services>
<service behaviorConfiguration="SecureBehavior" name="secureService">
<endpoint address="" binding="basicHttpBinding" bindingConfiguration="SecureBinding" contract="<Your webservice class name including namespace>" />
<endpoint address="mex" binding="mexHttpsBinding" contract="IMetadataExchange" />
</service>
Это должно позволить вам использовать SSL на вашем сайте после его размещения.
Для подключения с вашего клиента вы должны использовать следующее (при условии C #)
BasicHttpBinding binding = new BasicHttpBinding();
binding.Security.Mode = BasicHttpSecurityMode.Transport;
EndPointAddress endpointAddress = new EndpointAddress("Your Service address (including HTTPS)");
Client svc = new Client(binding,endpointAddress)
Другим способом будет использование шифрования вместо SSL.Зашифруйте пароль на стороне клиента и отправьте зашифрованные данные в службу, хотя я не совсем уверен в лучших методах для этого.
Надеюсь, это поможет
РЕДАКТИРОВАТЬ
Если вы хотите отправить имя пользователя и пароль в службу, вам просто нужно создать новый метод в службе.
Вы должны определить контракт операции в файле интерфейса.(IService1.cs)
[OperationContract]
bool Login(string password,string username);
тогда вы создадите метод в классе обслуживания (Service1.svc)
public bool Login(string password,string username)
{
//Your Code to check the username and password here
}
Это, вероятно, самый простой способ сделать это.Другим более сложным способом было бы использовать пользовательский поставщик Membership для аутентификации пользователей.
Вам потребуется создать класс, который наследует от MembershipProvider, и переопределить метод ValidateUser
public class SampleMembershipProvider : MembershipProvider
{
public override bool ValidateUser(string username, string password)
{
//check the username and password here
}
//No need to override the other methods just leave them
....
}
, теперь вам нужночтобы указать webconfig использовать проверку подлинности с помощью форм и использовать свой пользовательский поставщик членства
<authentication mode="Forms" />
<membership defaultProvider="CustomMembershipProvider">
<providers>
<clear />
<add name="CustomMembershipProvider" type="SampleApplication.CustomMembershipProvider" />
</providers>
</membership>
Теперь, когда у вас настроен поставщик членства, вы можете изменить свой код входа сверху на следующий код, этот код будет проверять подлинностьпользователь и устанавливает файл авторизации.
public bool Login(string password,string username)
{
if (Membership.ValidateUser(username, password))
{
FormsAuthentication.SetAuthCookie(username, false);
return true;
}
return false;
}
Теперь, когда вы вызываете метод в своей службе, вы можете проверить, аутентифицирован ли пользователь, и если это так, вы можете запустить команду, в противном случае - нет.
bool DoWork()
{
if (HttpContext.Current.User.Identity.IsAuthenticated)
{
//do something
return true;
}
else
{
return false;
}
}
Дайте мне знать, если вам нужно, чтобы я что-то прояснил