Я использую Win32 API LogonUser:LogonUser и делегация
token = LogonUser(...)
WindowsIdentity newId = new WindowsIdentity(token);
WindowsImpersonationContext impersonatedUser = newId.Impersonate();
Однако при вызове службы WCF после этого я не могу использовать олицетворение идентичности. Я думаю, это связано с тем, что impersonatedUser.ImpersonationLevel равен олицетворению.
Это причина? Является ли уровень ImpersonationLevel.Identification тем, что мне нужно? Как получить такой уровень?
Примечание для тех, кто заинтересован в создании экземпляров WindowsIdentity: 'WindowsIdentity.Dispose()' закрывает дескриптор маркера, то есть вам не нужен вызов 'CloseHandle (duplicateTokenHandle)', если вы вызываете 'Dispose'. – Joh
@Joh - Я не думаю, что это правильно. 'Dispose' * does * вызывает' CloseHandle() ', но не на дескриптор, переданный в конструктор. Конструктор дублирует поставляемую ручку; это дубликат, который закрыт в 'Dispose'. – Olly