Мне нужна помощь с веб-службами ASMX.Обычная проверка подлинности на удаленном сервере
Предположим, у меня есть ServerService, который предоставляет некоторые данные. Предположим, что у него есть метод GetRandomInteger, который возвращает случайное целое число (очевидно). Он реализует обычную базовую аутентификацию с использованием IHttpModule.
public class BasicAuthHttpModule : IHttpModule
{
private UserRepository _userRepository;
public void Dispose()
{
}
public void Init(HttpApplication application)
{
_userRepository = new UserRepository();
application.AuthenticateRequest += OnAuthenticateRequest;
application.EndRequest += OnEndRequest;
}
public void OnAuthenticateRequest(object source, EventArgs e)
{
var app = (HttpApplication)source;
string authHeader = app.Request.Headers["Authorization"];
if (!string.IsNullOrEmpty(authHeader))
{
// Here I successfully get credentials from header
if (_userRepository.ValidateUser(username, password)) return;
// Return 401 and CompleteRequest
}
else
{
// Return 401 and End
}
}
public void OnEndRequest(object source, EventArgs eventArgs)
{
if (HttpContext.Current.Response.StatusCode == 401)
{
// Return 401 and require new authorization
}
}
К счастью, он работает. Теперь я могу успешно открыть файл Service.asmx, получить базовое окно проверки подлинности и получить доступ к его методу GetRandomInteger после успешной аутентификации.
Теперь у меня есть приложение ASP.NET MVC 4 с именем ClientService. Он должен обеспечивать пользовательский интерфейс удобным и соответствующим доступом к методам ServerService. Теперь он имеет контроллеры по умолчанию, как счета и дома, представления по умолчанию и т.д.
Мне нужна эта ClientService для проверки подлинности на ServerService. Я имею в виду, что будет страница Home/Index с кнопкой «Login». Я ввожу логин и пароль, и ClientService пытается выполнить аутентификацию в ServerService. Он возвращает ошибку при сбое или аутентифицируется при успешном доступе к какой-либо странице Home/RandomInt, на которой будет показано целое число, запрошенное из ServerService. Каков наилучший и самый простой способ сделать это?
Как реализовать регистрацию на сервере ServerService? В ASMX нет атрибута AllowAnonymous или чего-то другого, поэтому я не могу зарегистрировать пользователя, потому что у него нет доступа к каким-либо из методов из-за ошибки 401.
Заранее спасибо.
P.S. Нет. Я не могу использовать WCF или что-то еще. Мне нужно внедрить веб-сервис ASMX.
Update 1: ОК, я узнал что-то новое здесь
Существует старый стиль вещь, как «Веб-ссылки», и это не является «справочная служба». Я добавил этот веб-ссылку на мой проект, и теперь я могу назвать некоторые методы из этой ASMX страницы таким образом:
try
{
ServerService svc = new ServerService();
svc.Credentials = new NetworkCredential("user", "password");
int a = svc.GetRandomInteger();
} catch (WebException e) {
// Auth failed
}
Однако, я не понимаю, как связать его с проверкой подлинности ASP.NET MVC ClientService. Таким образом, оба вопроса остаются открытыми. Надеюсь, я пойму это или вы мне поможете.