wcf 401 и запрашивает логин / пароль в службе RESTful

#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-Аутентификация: Базовая область = «Безопасная зона»

Затем браузер узнает и отображает окно входа для пользователя