UWP: использовать учетные данные NTLM для вызова PUT Webservice - PullRequest
0 голосов
/ 22 октября 2018

Я занимаюсь разработкой UWP-приложения.Поэтому я создал PUT-Webservice с аутентификацией Windows.

Сначала я попытался вызвать его с помощью этого кода:

JPasswordChangeData jPasswordChangeData = new JPasswordChangeData()
{
    OldPassword = oldpassword,
    NewPassword = newpassword
};

var credential = new NetworkCredential("<username>", "<password>", "<domain>");

string apiServerSecurePath = "https://MyServername:6501/";
var myCache = new CredentialCache();

// Add the target Uri to the CredentialCache with credential object
myCache.Add(new Uri(apiServerSecurePath), "NTLM", executingCredentials);

// Create an HttpClientHandler to add some settings
var handler = new HttpClientHandler();
handler.AllowAutoRedirect = true;
handler.Credentials = myCache;

HttpClient httpClient = new HttpClient(handler);

HttpResponseMessage httpResponseMessage = httpClient
    .PutAsync(apiServerSecurePath + "api/ActiveDirectory/ChangePassword/" + username,
    new StringContent(JsonConvert.SerializeObject(jPasswordChangeData), Encoding.UTF8, "application/json")).Result;

Но затем я получаюошибка:

The value 'System.Net.CredentialCache' is not supported for property 'Credentials'.

Далее я попытался использовать «Windows.Web.Http.HttpClient»:

var filter = new HttpBaseProtocolFilter();
filter.AllowAutoRedirect = true;
filter.ServerCredential = new PasswordCredential("<Domain>", "<username>", "<password>");
filter.AllowUI = false;

JPasswordChangeData jPasswordChangeData = new JPasswordChangeData()
{
    OldPassword = oldpassword,
    NewPassword = newpassword
};

Windows.Web.Http.HttpClient windowsHttpClient = new Windows.Web.Http.HttpClient(filter);

//HttpClient httpClient = new HttpClient();
var httpResponseMessage = await windowsHttpClient.PutAsync(
new Uri("http://MyDomain:6001/api/ActiveDirectory/ChangePassword/" + txtblk_samaccountname.Text.Trim()),
new HttpStringContent(JsonConvert.SerializeObject(jPasswordChangeData), Windows.Storage.Streams.UnicodeEncoding.Utf8, "application/json"));

Я также установил необходимыеФункции в Package.appxmanifest.

Извините, у меня есть только скриншот на немецком языке.Вот перевод:

  • Интернет (клиент и сервер)
  • Интернет (клиент)
  • Частные сети (клиент и сервер)
  • Корпоративная аутентификация

Package.appxmanifest

Но затем я получаю этот ответ от веб-службы: Servererror

Переведеноэто означает:

401 - Несанкционированный: доступ запрещен из-за неверных учетных данных.

Указанные учетные данные не разрешают вам просматривать этот каталог или страницу.

Есть ли у кого-тоИдея, в чем моя неудача?

Встряхну вперед!

С наилучшими пожеланиями

Матиас

1 Ответ

0 голосов
/ 23 октября 2018

Теперь я знаю немного больше, но у меня нет решения ...

Я не говорил, что UWP разработан для малины с Windows 10 IOT Core.

Когда я пытаюсь отправить учетные данные с ПК в домене, он работает.

Когда я пытаюсь использовать тот же код на малине, он не работает.

Я думаю, что причинав том, что малины нет в домене.Но я не могу присоединить Windows 10 IOT Core к домену.Только Windows 10 IOT Enterprise может быть присоединена к домену.Но Windows 10 IOT Enterprise нельзя установить на малину.

Так что я думаю, что мне нужно добавить базовую аутентификацию в мой веб-сервис.Если у кого-то есть идея, как я могу использовать учетные данные пользователя активного каталога, я буду очень благодарен!

...