WebAPI,DPAPI和LoadUserProfile

时间:2019-05-02 19:03:37

标签: asp.net-web-api2 owin dpapi windows-integrated-auth

我们正在尝试在基于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相关的配置文件数据。 是我们遗漏了某些东西,还是设计使然?

0 个答案:

没有答案