Пару месяцев назад я разрабатывал демонстрационное приложение для Windows 8 (HTML/JS), и мне нужно было пройти аутентификацию в веб-службе в корпоративной сети. Необходимые учетные данные такие же, как и у учетной записи домена пользователя, и я надеялся использовать некоторые возможности приложений Windows 8, такие как Аутентификация предприятия. Будучи иногда хакером разработчиком, я попытался включить это и ковыряться в различных объектах и ​​интерфейсах в поисках имени пользователя и пароля. У меня были сильные чувства, что это будет не так просто, и я должен отправить отчет об ошибке, если это так. В конце концов я нашел, как получить основное имя пользователя (доменное имя/имя пользователя, достаточно близко…) с помощью Windows.System.UserProfile.UserInformation.getPrincipalNameAsync(). Покопавшись в объекте UserInformation, я нашел способы найти общую информацию о пользователе, не имеющую ничего общего с типом объекта аутентификации, который, как я полагал, веб-служба могла понять и использовать. В результате проекту пришлось довольствоваться запросом аутентификации при запуске.

Потерпев поражение, я сдался и разместил вопрос на Stackoverflow, сокрушаясь о том, что я знал, что мой пользователь вошел в систему, но мне все равно было предложено ввести учетные данные пользователя…

Свет в конце туннеля аутентификации

Буквально на этой неделе я наконец-то получил возможный ответ по ситуации. Я должен попробовать добавить сайт в локальную интрасеть в разделе «Интернет». Только когда я начал думать о последствиях того, что я хотел, чтобы приложение делало, я начал понимать, почему этот дополнительный шаг был сочтен необходимым. Я говорил приложению: эй, я знаю, что мой пользователь вошел в систему, и я хочу, чтобы его учетные данные для аутентификации были отправлены сюда, потому что ему / ей нужно использовать этот веб-сервис. Нигде в этом заявлении я не внушаю доверия или уверенности в том, что моя цель. Я попробовал, и с большим успехом запрос аутентификации больше не нужен.

Наряду с этим изменением в манифесте приложения также были установлены следующие возможности приложения:

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

Из уголка разработчиков

Думая об этом с точки зрения разработчика, я должен иметь возможность отправлять свои учетные данные с разрешения, и пока я не уверен, что я могу сделать внутри приложения, чтобы вызвать запрос UAC, информирующий пользователя о том, что приложение нравится использовать свои учетные данные для аутентификации. Текущее ручное решение делает две вещи: требует вмешательства пользователя/установщика для установки и скрывает тот факт, что используются учетные данные вошедшего в систему пользователя. Мне придется немного подумать над этой проблемой, чтобы увидеть, есть ли более элегантное решение.