Мы пытаемся использовать DPAPI в нашем собственном приложении WebAPI на основе OWIN. Приложение настроено для проверки подлинности Windows и работает как служба под учетной записью SYSTEM:
var listener = (HttpListener)app.Properties["System.Net.HttpListener"];
listener.AuthenticationSchemes = AuthenticationSchemes.Ntlm;
В контроллере мы делаем что-то вроде этого:
public IHttpActionResult SomeAction()
{
var currentWindowsIdentity = (WindowsIdentity)this.User.Identity;
// load user profile for currentWindowsIdentity and impersonate
using (UserProfile.Load(currentWindowsIdentity)) // UserProfile is a wrapper arounf LoadUserProfileW
using (currentWindowsIdentity.Impersonate())
{
ProtectedData.Unprotect(…);
}
}
Сбой вызова ProtectedData.Unprotect с CryptographicException: Key not valid for use in specified state
.
Если тот же пользователь, который вызывает действие, входит в систему на компьютере, на котором запущено приложение, то ProtectedData.Unprotect завершается успешно. Похоже, что LoadUserProfileW не загружает некоторые данные профиля, связанные с DPAPI.
Мы что-то упустили, или это задумано?