我们目前正在为我们的其他 azure 应用程序将加密密钥存储在受保护的注册表项中,并且一直在通过启动任务添加该密钥。虽然我看到 lightswitch 应用程序中也有一个 csdef 文件,但启动任务似乎永远不会在本地或 azure 上触发。我什至尝试将输出添加到 cmd 文件中,以便查看是否有任何错误,但甚至没有创建该文件。Lightswitch 似乎没有 Win32.registry 因此通过代码添加密钥似乎是不可能的。
有没有其他人能够在 azure 托管的灯开关应用程序中运行启动任务?据我了解,在 lightswitch 和包含 web.worker 角色的项目之间,天蓝色的一面不应该有那么大的不同。它们仍在虚拟机上运行,因此启动任务应该仍然能够访问注册表。如果不可能,是否有人对如何添加注册表项有任何其他想法?将密钥放在代码中绝对不理想。仅供参考,reg文件和cmd文件都在服务器文件夹中,并设置为内容并始终复制。
启动.cmd:
regedit /s 456ddfrt.reg
exit /b 0
文件定义:
<WebRole name="LightSwitchWebRole"
vmsize="Small"
enableNativeCodeExecution="true">
<Startup>
<Task commandLine="startup.cmd" executionContext="elevated" taskType="simple"/>
</Startup>
解决方案
我最终按照 Yann 的建议使用了独立存储。下面是一个代码示例。
//Get key from storage, add if not exists
try
{
String strKey = (string)appSettings["encrKey"];
strKey = DecryptString(strKey);
}
catch (Exception Ex)
{
appSettings.Add("encrKey",[mykey]);
String strKey = (string)appSettings["encrKey"];
strKey = DecryptString(strKey);
}
它仍然涉及将密钥放入代码中,但密钥是使用不同的加密方法加密的,并且在天蓝色上,他们访问我的代码的可能性非常低。感谢所有的建议!