DPAPI保护来自不同用户的数据



我使用DPAPI ProtectData如下:

var temp = new byte[32]
{
    1,1,1,1,1,1,1,1,
    2,2,2,2,2,2,2,3,
    3,3,3,3,3,3,3,3,
    4,4,4,4,4,4,4,4
};
ProtectedData.Protect(temp, null, DataProtectionScope.CurrentUser);
string userName = System.Security.Principal.WindowsIdentity.GetCurrent().Name;

让我们假设temp现在看起来像:

temp = { 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,....31 };

我想从。exe文件和我的WebService (IIS)执行此代码。
问题是,如果我从exe运行代码,当前用户是MyDomain/Administrator,如果我从WebService运行代码,当前用户是IIS APPPOOL/MyApp

如何解决这个问题?我正试图从WebService运行.exe文件,如下所示:

Process.Start(@"C:myexe.exe");

但由于某些原因(我有完全访问我的iis应用程序),无论如何,我认为这不是这种情况下的正确解决方案。

注意:出于安全原因,我不能从DataProtectionScope.LocalMachine更改为DataProtectionScope.CurrentUser

如果您不想使用DataProtectionScope.CurrentUser,您可以将其作为LocalMachine安装。然后,让WebService解密它,然后使用CurrentUser重新加密。确保删除旧值及其所有临时副本。通过这种方式,您可以将它从LocalMachine中取出,并在适当的用户运行时将其锁定。

这仍然使密钥暴露在LocalMachine级别,但时间更短。

另一个解决方案是使用LocalMachine并使用附加的熵特性,在两个可执行文件之间共享一个秘密。这可能是应用程序已知的一个模糊值(no "real"安全性),或者用户提供的密码。用户提供的密码解决方案可能更安全,但也更麻烦,编程开销也更大。

如果安装和运行WebService之间的时间窗口很小,那么第一个解决方案可能比较合适。

问题解决了。
从本地用户运行IIS应用程序。
你可以通过选择应用程序池并点击高级设置来找到它。在操作窗格菜单下。选择Identity,然后单击所列当前用户旁边的按钮。选择"自定义帐户",单击"设置"。使用格式domainusername作为用户名,并输入用户密码。

相关内容

  • 没有找到相关文章

最新更新