Для начала вы должны использовать SSL и отклонять любые запросы, которые его не используют.Это зашифрует данные при их передаче через Интернет.
Если вы используете SOAP, вы можете определить в своей службе собственный заголовок, который принимает имя пользователя / пароль.Затем в первой строке каждого открытого метода проверьте имя пользователя и пароль по базе данных.В случае успеха установите соответствующий HttpContext.Current.User, и ваш сервис будет хорошо привязан к встроенной инфраструктуре Asp.NET.
ADDED: Ниже приведен пример SoapHeader, который включаетимя пользователя / пароль для аутентификации.
// define the header
public class AuthenticationHeader : SoapHeader
{
public String UserName { get; set; }
public String Password { get; set; }
}
// your service
public class PublicWebService : WebService
{
// defines an instance of the header as part of the service
public AuthenticationHeader Authentication;
private void Authenticate()
{
// validate the username / password against a database
// set the HttpContext.Current.User if successful.
// Maybe throw a SoapException() if authentication fails
}
// Notice the SoapHeader("Authentication") attribute...
// This tells ASP.Net to look for the incoming header for this method...
[WebMethod]
[SoapHeader("Authentication")]
public void PublicMethod1()
{
Authenticate();
// your code goes here
}
// Expose another method with the same authentication mechanism
[WebMethod]
[SoapHeader("Authentication")]
public void PublicMethod2()
{
Authenticate();
// your code goes here
}
}
Теперь, если вы запустите утилиту wsdl, сгенерированный прокси-класс будет содержать определенный заголовок аутентификации:
PublicWebService s = new PublicWebService();
s.Authentication = new AuthenticationHeader();
s.Authentication.UserName = "xxxxxxxx";
s.Authentication.Password = "yyyyyyyy";
s.PublicMethod1();
s.PublicMethod2();