Windows.Web.Http.HttpClient + WEB API Аутентификация Windows

Я использую Windows.Web.Http.HttpClient для подключения к моему WEB API. Приложение не запрашивало идентификатор пользователя и пароль, но недавно я изменил WEB API, переместив фильтр AuthorizeAttribute с Action на уровень Class. Теперь мое приложение Windows store 8.1 запрашивает идентификатор пользователя и пароль. Пожалуйста, дайте мне знать, как настроить HttpClient, чтобы не запрашивать логин и пароль. Может ли any1 предложить мне мне нужно добавить заголовок в мой httpcleint

using (Windows.Web.Http.HttpClient httpClient = new Windows.Web.Http.HttpClient ()) {// Добавить заголовок пользовательского агента var headers = httpClient.DefaultRequestHeaders;

// Безопасный способ проверить значение заголовка от пользователя - это метод TryParseAdd // Поскольку мы знаем, что этот заголовок в порядке, мы используем ParseAdd с, чтобы вызвать исключение // с неверным значением - http://msdn.microsoft. ком / EN-US / библиотека / окно / приложение / dn440594.aspx

                headers.UserAgent.ParseAdd("ie");
                headers.UserAgent.ParseAdd("Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; WOW64; Trident/6.0)");


                using (var response = await httpClient.GetAsync(new Uri(url)))

Я не вижу способа отправки учетных данных по умолчанию.

2 ответа

Решение

Отключить диалоги пользовательского интерфейса, используя HttpBaseProtocolFilter.AllowUI, Попробуй это:

Windows.Web.Http.Filters.HttpBaseProtocolFilter filter =
    new Windows.Web.Http.Filters.HttpBaseProtocolFilter();
filter.AllowUI = false;
HttpClient client = new HttpClient(filter);

Uri uri = new Uri("http://localhost/?basic=1");
var response = await client.GetAsync(uri);
System.Diagnostics.Debug.WriteLine(response);

Вам нужны полномочия? использование HttpBaseProtocolFilter.ServerCredential, Попробуй это:

Uri uri = new Uri("http://localhost?ntlm=1");

Windows.Web.Http.Filters.HttpBaseProtocolFilter filter =
    new Windows.Web.Http.Filters.HttpBaseProtocolFilter();
filter.AllowUI = false;

// Set credentials that will be sent to the server.
filter.ServerCredential =
    new Windows.Security.Credentials.PasswordCredential(
        uri.ToString(),
        "userName",
        "abracadabra");

HttpClient client = new HttpClient(filter);
var response = await client.GetAsync(uri);
System.Diagnostics.Debug.WriteLine(response);

Вам нужны учетные данные Windows по умолчанию (учетные данные домена)? Просто добавьте возможность корпоративной аутентификации в свой Package.appxmanifest.

Я пытался применить ваше решение, но оно не работает, как ожидалось, или, может быть, я не понимаю, что я должен делать. Мне нужно использовать учетные данные Windows, и я включил возможность корпоративной аутентификации в своем приложении UWP.

Я использую код, который вы предлагаете:

var filter = new HttpBaseProtocolFilter();
filter.AllowUI = false;
var client = new HttpClient(filter);
HttpResponseMessage response = new HttpResponseMessage();
response = await client.PostAsync(concUri, null);

Но ответ возвращает мне ошибку 401.3...

Если я добавлю логин / пароль к ServerCredential, это будет хорошо работать:

var filter = new HttpBaseProtocolFilter();
filter.AllowUI = false;
filter.ServerCredential  = new Windows.Security.Credentials.PasswordCredential(WebServiceConstants.WebServiceUrl.ToString(), "login", "password");
var client = new HttpClient(filter);
HttpResponseMessage response = new HttpResponseMessage();
response = await client.GetAsync(concUri);

Но я не понимаю, какова роль возможности Enterprise Authentication в этом случае, если мне нужно передать логин и пароль...

Другие вопросы по тегам