Я использовал веб-дизайн С открытым исходным кодом в прошлом. У них есть довольно много css тем, не знайте о ASP.Net
Вы также можете использовать заголовки SOAP для передачи учетных данных пользователя или токена аутентификации. Вы можете найти статью о том, как это сделать, в Аутентификация для веб-служб (с использованием заголовков SOAP) , но, чтобы подвести итог, вы создаете класс заголовка:
using System.Web.Services.Protocols;
public class AuthHeader : SoapHeader
{
public string Username;
public string Password;
}
Вы определяете общедоступное свойство в веб-службе
public AuthHeader AuthenticationInfo;
и добавьте некоторые атрибуты к любым веб-методам, которые должны быть доступны только для аутентифицированных пользователей:
[SoapHeader ("AuthenticationInfo", Required=true)]
[WebMethod]
public string HelloSecretWorld()
{
if(!(AuthenticationInfo.UserName == "Hello" && AuthenticationInfo.UserName.Password == "World"))
throw new AuthenticationException();
return "Hello World";
}
Клиентский код будет выглядеть так:
MyWebService ws = new MyWebService();
ws.AuthenticationInfo = new AuthHeader {Username = "Hello", Password = "World"};
Console.Out.WriteLine(ws.HelloSecretWorld());
Таким образом, вам не нужно изменять подписи методов для добавления аутентификация.
Мне приходилось решать эту проблему несколько раз при подключении портативных (Windows Mobile) приложений к веб-службам. Решение, которое я использовал, - создать файл cookie на основе хэша имени пользователя и IP-адреса после успешного завершения процесса аутентификации. например, User ID и pwd соответствуют сохраненным учетным данным на сервере. Затем вы передаете этот файл cookie обратно клиенту, который затем будет передан вместе со всеми запросами веб-служб для остальной части сеанса. например, первым параметром любого веб-метода является файл cookie.
псевдокод:
string cookie = webServiceInstance.Authenticate("userName", "password");
double balance = webServiceInstance.GetBalance(cookie, someId);
Конечно, вы хотите использовать SSL, чтобы не передавать свой идентификатор пользователя и пароль в виде обычного текста.