我们正在尝试在基于OWIN的WebAPI自托管应用程序中使用DPAPI。该应用已配置为进行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相关的配置文件数据。
是我们遗漏了某些东西,还是设计使然?