Приложение для Магазина Windows с корпоративной аутентификацией и олицетворением
Укороченная версия: Почему, когда я имитирую веб-запрос, сделанный приложением Магазина Windows, я получаю объект WindowsIdentity с правильным именем пользователя, но его свойство IsAuthenticated возвращает False? Выполнение того же запроса из браузера (включая Metro IE10) дает IsAuthenticated == true.
Длинная версия: я
m создание прототипа внутреннего корпоративного решения, состоящего из WCF-сервиса и приложения WinJS. WCF-сервис основан на webHttpBinding (то есть простых запросах GET / POST).
Определенные действия необходимо обрабатывать от имени пользователя, делающего запрос, поэтому служба настроена на олицетворение своих абонентов. Вот пример конфигурации:
... и код:
public class WcfService : IWcfService
{
[OperationBehavior(Impersonation=ImpersonationOption.Required)]
public UserInfo GetUserInfo()
{
UserInfo ui = new UserInfo();
WindowsIdentity identity = ServiceSecurityContext.Current.WindowsIdentity;
ui.UserName = identity.Name;
ui.IsAuthenticated = identity.IsAuthenticated;
ui.ImpersonationLevel = identity.ImpersonationLevel.ToString();
ui.IsAnonymous = identity.IsAnonymous;
ui.IsGuest = identity.IsGuest;
ui.IsSystem = identity.IsSystem;
ui.AuthenticationType = identity.AuthenticationType;
return ui;
}
}
Таким образом, эта операция просто собирает информацию о вызывающем абоненте и отправляет ее обратно в строку json.
Переезд к клиенту. Чтобы включить автоматическую аутентификацию я проверил "Аутентификация предприятия ","Интернет (Клиент) " а также "Частные сети " в приложении Магазина Windows »файл манифеста.
Из приложения Магазина Windows я отправляю запрос с помощью функции WinJS.xhr:
var options = {
url: "http://localhost:8787/getuserinfo"
};
WinJS.xhr(options).then(function (xhrResponse) {
var userInfoBlock = document.getElementById("userInfoBlock");
var data = JSON.parse(xhrResponse.response);
userInfoBlock.innerHTML += ""
for (var p in data) {
if (data.hasOwnProperty(p)) {
userInfoBlock.innerHTML += "" + p + ": " + data[p] + "";
}
}
userInfoBlock.innerHTML += "";
});
Теперь, когда я запускаю приложение Магазина Windows и оно отправляет запрос, я получаю ответ:
AuthenticationType: "NTLM"
ImpersonationLevel: "Impersonation"
IsAnonymous: false
IsAuthenticated: false
IsGuest: false
IsSystem: false
UserName: "TESTBOX\dev"
Если я отправлю запрос через браузерс адресной строки, я получаю тот же ответ, с той лишь разницей, что "IsAuthenticated: true ".
Я также заметил, что если я отключуАутентификация предприятия », он вызывает всплывающее окно «Учетные данные» и после предоставления правильных учетных данных яя получаюIsAuthenticated: true ".
Я что-то упускаю или ожидаю слишком многого от возможности EnterpriseAuthentication?