Ответ 1
Как мне отправить учетные данные клиента?
Расположение по умолчанию для отправки информации аутентификации - это заголовок авторизации. Вы можете использовать это для базовой аутентификации, а также для других типов аутентификации (JWT, Bearer и т.д.).
Authorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==
Чтобы добавить, например, базовый заголовок проверки подлинности к вашему запросу, вы можете использовать следующий код на своем клиенте:
WebRequest request = (HttpWebRequest)WebRequest.Create("https://yoururl");
request.Headers.Add(HttpRequestHeader.Authorization, "Basic " + Convert.ToBase64String(System.Text.ASCIIEncoding.ASCII.GetBytes("user:password")));
В какой момент я обрабатываю эти учетные данные?
Я бы написал DelegatingHandler
и использовал его, чтобы разрешить ваш "главный". Затем вы можете установить его в HttpContext.CurrentPrincipal
, чтобы он был доступен там, где вам это нужно, в рамках запроса. DelegatingHandler
вызывается перед вашими контроллерами, как вы можете видеть на изображении ниже, что делает его идеальным для логики аутентификации.
Я бы сделал то же самое на клиенте (напишите DelegatingHandler
или ActionFilterAttribute
), чтобы добавить заголовок проверки подлинности по умолчанию. Обратите внимание, что DelegatingHandler
являются частью конвейера HTTP и ActionFilterAttribute
относятся к конвейеру MVC.
И последнее, но не менее важное: я бы рекомендовал не писать собственную логику проверки подлинности, но придерживаться одной из стандартных фреймворков. Это может быть так же просто, как использование базовой аутентификации по протоколу HTTPS и столь же сложно, как реализация OAuth. Но я бы держался подальше от своих решений.
Мне понравилось также приглашать вас посмотреть этот ответ, который я дал на аналогичный вопрос.
Примечание. ASP.NET Web Api основан на REST, поэтому imho вы не хотите вообще хранить информацию о сеансе.
Изменить:. Пример того, как реализовать обработчик делегирования, который обрабатывает базовую аутентификацию, см.: базовая HTTP-аутентификация в asp.net web api с помощью обработчиков сообщений.