Я должен передать a NetworkCredential
объект с учетными данными в настоящее время исполняемого роль пользователя к веб-сервису из приложения asp.net.
Мой код похож на это:
WindowsIdentity windowsIdentity = HttpContext.Current.User.Identity as WindowsIdentity;
WindowsImpersonationContext context = windowsIdentity.Impersonate();
try {
var client = GetClient();
client.ClientCredentials.Windows.ClientCredential = CredentialCache.DefaultNetworkCredentials;
Log("WindowsIdentity = {0}", windowsIdentity.Name);
Log("DefaultNetworkCredentials = {0}", CredentialCache.DefaultNetworkCredentials.UserName);
client.DoSomething();
} finally {
context.Undo();
}
Я понял это CredentialCache.DefaultNetworkCredentials
должен дать учетные данные в настоящее время исполняемого роль пользователя, но они не имеют место.
Сообщения журнала, которые я получаю,
WindowsIdentity = TESTDOMAIN\TESTUSER
DefaultNetworkCredentials =
Я делаю что-то не так? Если так, как Вы получаете объект NetworkCredential для в настоящее время исполняемого роль пользователя?
Довольно длинная статья в MSDN, объясняющая возможности получения сетевых учетных данных в ASP:
Как: Использовать олицетворение и делегирование в ASP. NET 2.0
Еще одна статья в блоге на эту тему (хотя я не проверял, работает ли на самом деле решение:
Невозможно использовать ASP.NET Ambersonated User ( Current.user.identity
) Для сетевой аутентификации он работает только на месте.