我使用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 = { 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
答案 0 :(得分:2)
如果您不想使用DataProtecitonScope.LocalMachine
,可以先将其安装为LocalMachine
。然后,让WebService
解密它,然后使用CurrentUser
重新加密它。确保删除旧值。通过这种方式,您可以从LocalMachine
获取它,并在适当的用户运行后将其锁定。
这仍然会使密钥在LocalMachine
级别暴露一段时间。
另一个解决方案是使用LocalMachine
并使用额外的熵功能和两个可执行文件之间共享的秘密。这可能是应用程序已知的模糊值(没有"真正的"安全性),或者是用户提供的密码。用户提供的密码解决方案可能更安全,但也更多的是痛苦和更多的编程开销。
如果安装和WebService
运行之间的差距很小,那么第一个解决方案可能非常合适。
答案 1 :(得分:0)
问题解决了。
我从本地用户运行IIS应用程序
您可以通过选择应用程序池并单击“操作”窗格菜单下的“高级设置...”来找到此选项。选择“身份”,然后单击列出的当前用户旁边的按钮。选择自定义帐户,然后单击设置使用格式domain \ username作为用户名并输入用户的密码。