У меня была такая же ситуация: мне нужно было защитить часть моего веб-сайта (включая веб-службы) аутентификацией по формам, а также иметь незащищенную публичную часть, например формы входа / регистрации, CSS-файлы, JS-файлы ...
Я решил проблему входа в систему, назначив общедоступный веб-сервис (не защищенный проверкой подлинности с помощью форм), который может обрабатывать вашу функцию входа в систему.
Ваша функция входа в систему должна выглядеть следующим образом:
[WebMethod(EnableSession=true)]
[ScriptMethod]
public ResponseBase<bool> DoLogin(LoginCredentials Credentials)
{
try
{
// Perform login with credentials
if (loginOK)
{
FormsAuthentication.SetAuthCookie(/* Your user identification here */, true);
}
return new ResponseBase<bool> { Code= true};
}
catch (Exception _ex)
{
// Save your log
return new ResponseBase<bool> { Message = "Incorrect Login" };
}
}
Ваш клиент получит cookie для проверки подлинности форм и ваш ответ на вход в систему.Позже вы сможете оценить успешность входа в систему, оценив атрибут Code в ответе.
Класс ResponseBase выглядит следующим образом:
[Serializable]
[DataContract]
public class ResponseBase<T>
{
/// <summary>
/// Return code.
/// </summary>
[DataMember]
public T Code { get; set; }
/// <summary>
/// Message.
/// </summary>
[DataMember]
public string Message { get; set; }
}
Последнее, но не в последнюю очередь, я призываю васвызывать ваши веб-службы, используя JSON вместо XML, из-за небольшого веса сообщения с нулевыми изменениями в коде сервера.Кроме того, в клиенте вам не нужно вручную создавать сообщение, как в вашем примере.