我的问题与this one基本相同,但适用于Windows应用商店应用,c#和Visual Studio。我想有一个简单的方法来保存项目中的秘密值,在一个可以在(未签入)源代码控制中忽略的文件中。我应该如何构建我的项目来存储应用程序秘密,使构建/源代码控制变得容易?
我的第一个想法是将其存储在XML文件中(未签入),并在运行时加载它,但这使得安装它的用户可以使用它,因此应该在构建时完成。在构建项目时,如何存储一些秘密值并让visual studio在我的代码中替换它们?
答案 0 :(得分:0)
在我的公司,我们决定为您提供以下解决方案。在配置文件中,我们在外部配置中链接具有“秘密”值的部分。 外部配置是源控制。首先它不是,但是在我们的构建服务器丢失磁盘出现问题之后,我们认为将它存储在有备份的地方更安全。源代码管理中的文件夹(也可以在文件服务器上)实际上仅限于只对需要此内容的人进行读写。构建流程签出“项目”文件夹加“配置”文件夹并进行构建。构建“配置”文件夹后删除。对构建服务器的访问也受到限制。
答案 1 :(得分:0)
一种选择是将秘密存储在源代码管理中,但以加密形式存储它们。在开发或构建环境中,使用环境变量来存储密钥,并即时解密。这样您就可以在保持信息安全的同时获得源代码控制的好处。
即使您使用的是app.config或web.config,也可以这样做,您只需要在启动时从代码修改配置。
埃里克
答案 2 :(得分:0)
<强>更新强>
如果你把秘密放在一个不受信任的区域(例如公共源控制),它就很脆弱。即使它是加密的,也可以通过足够的努力来检索。
真正让它无法触及的唯一方法是拥有一个与第三方API交互的外部服务。这有其自身的权衡(例如您在评论中提到的用户身份验证)。特别是如果您的开发人员在测试时需要使用第三方API,我认为没有其他选择会限制秘密的曝光。
答案 3 :(得分:0)
在项目中创建一个新的类文件,该文件包含所有秘密值的插槽,并为所有这些值保存虚拟/测试值。将其与项目的其余部分一起检查到源代码控制中,这样任何构建它而无法访问机密的人都会获得某种测试版本。
然后,使用真实的机密值创建该类文件的副本,并将其放在源代码管理之外的某个位置。在预构建事件中编写批处理脚本以查找此类文件,如果找到,则用它替换项目中包含的虚拟文件。
这样,您的项目仍然可以在源代码管理中,任何人都可以检查它,构建它,并在测试模式下运行它。您的秘密文件/值仅存储在构建服务器上,因此只有在构建项目时才会有实际值。
请记得在某处备份您的秘密文件。并且还记得.NET代码可以很容易地被反编译,所以你的秘密可能不像你希望的那样秘密 - 任何拥有.NET反射器的用户都可以看到你的发布程序集中的所有代码,包括你的秘密类。