Шифровать данные после олицетворения пользователя - PullRequest
0 голосов
/ 08 января 2019

Я использую этот метод для получения токена пользователя:

[DllImport("advapi32.dll", SetLastError = true, CharSet = CharSet.Unicode)]
internal static extern bool LogonUser(string lpszUsername, string lpszDomain, string lpszPassword, int dwLogonType, int dwLogonProvider, out IntPtr phToken);

Затем я использую этот код для защиты данных в контексте пользователя:

WindowsIdentity.RunImpersonated(new SafeAccessTokenHandle(pUserToken), () =>{
byte[] protected = ProtectedData.Protect(new byte[]{1,2,3}, null, DataProtectionScope.CurrentUser);
});

Я получаю это исключение для некоторых пользователей:

System.Security.Cryptography.CryptographicException: данные Операция защиты была неудачной. Это могло быть вызвано не загружен профиль пользователя для пользователя текущего потока контекст, который может иметь место, когда поток олицетворяет. в System.Security.Cryptography.ProtectedData.Protect (Byte [] userData, Байт [] необязательная энтропия, область действия DataProtectionScope)

Основной процесс выполняется с пользователем LocalSystem.

...