#c# #wcf #http #rest
#c# #wcf #http #rest
Вопрос:
Я пишу RESTful service с базовой авторизацией.
Вот что я делаю, когда нет заголовка авторизации или когда указан неправильный UN / Password
//Get authorization header
var auth = HttpContext.Current.Request.Headers.GetValues("Authorization");
if (auth == null)
{
outgoingResponse.StatusCode = HttpStatusCode.Unauthorized;
return false;
}
//Parse auth header:
var authString = auth[0];
String loginName, password;
try
{
var decbuff = Convert.FromBase64String(authString.Replace("Basic ", ""));
loginName = System.Text.Encoding.UTF8.GetString(decbuff).Split(':')[0];
password = System.Text.Encoding.UTF8.GetString(decbuff).Split(':')[1];
}
catch
{
outgoingResponse.StatusCode = HttpStatusCode.Unauthorized;
outgoingResponse.StatusDescription = "Invalid Authorization header";
return false;
}
Когда я смотрю в Fiddler, я вижу это:
Это нормально работает с моим клиентом (Android), но я хочу, чтобы этот сервис был доступен для просмотра через Explorer или другие браузеры. Как мне заставить Explorer запрашивать отмену пароля при отправке 401? Нужно ли мне что-то указывать?
Спасибо
Ответ №1:
Я понял это. Мне нужно было поместить HTTP-заголовок вместе с 401 следующим образом:
WWW-Аутентификация: Базовая область = «Безопасная зона»
Затем браузер узнает и отображает окно входа для пользователя