C# Azure Web角色--如何保护开源项目?

C# Azure Web角色--如何保护开源项目?,c#,azure,encryption,C#,Azure,Encryption,我有一个web角色是用C#和F#的组合编写的,我想在GitHub上公开它作为一个开源项目 这是我的ServiceConfiguration.Cloud.cscfg文件: <?xml version="1.0" encoding="utf-8"?> <ServiceConfiguration serviceName="My.Cloud.Service" xmlns="http://schemas.microsoft.com/ServiceHosting/2008/10/Servi

我有一个web角色是用C#和F#的组合编写的,我想在GitHub上公开它作为一个开源项目

这是我的
ServiceConfiguration.Cloud.cscfg
文件:

<?xml version="1.0" encoding="utf-8"?>
<ServiceConfiguration serviceName="My.Cloud.Service" xmlns="http://schemas.microsoft.com/ServiceHosting/2008/10/ServiceConfiguration" osFamily="4" osVersion="*" schemaVersion="2015-04.2.6">
  <Role name="My.Web.Role">
    <Instances count="1" />
    <ConfigurationSettings>
      <Setting name="Microsoft.WindowsAzure.Plugins.Diagnostics.ConnectionString" value="DefaultEndpointsProtocol=https;AccountName=myaccount;AccountKey=<<myaccountkey>>" />
      <Setting name="Microsoft.WindowsAzure.Plugins.RemoteAccess.Enabled" value="true" />
      <Setting name="Microsoft.WindowsAzure.Plugins.RemoteAccess.AccountUsername" value="roblyndon" />
      <Setting name="Microsoft.WindowsAzure.Plugins.RemoteAccess.AccountEncryptedPassword" value="<<my encrypted password>>" />
      <Setting name="Microsoft.WindowsAzure.Plugins.RemoteAccess.AccountExpiration" value="2017-05-17T23:59:59.0000000+01:00" />
      <Setting name="Microsoft.WindowsAzure.Plugins.RemoteForwarder.Enabled" value="true" />
      <Setting name="APPINSIGHTS_INSTRUMENTATIONKEY" value="205ceb49-275d-4c1c-a42c-fd7e55be0229" />
    </ConfigurationSettings>
    <Certificates>
      <Certificate name="Microsoft.WindowsAzure.Plugins.RemoteAccess.PasswordEncryption" thumbprint="35DE0821166BCB100B2BA7FF339436DA0CBC089F" thumbprintAlgorithm="sha1" />
    </Certificates>
  </Role>
</ServiceConfiguration>

我不想隐藏
——毕竟它是加密的,尽管使用了SHA-1

这种做法的荒谬之处在于,尽管我的远程访问密码是加密的,但指向我的存储帐户的诊断连接字符串却被直接公开。事实上,它包含我的存储帐户的主访问密钥的未加密版本

如果我把它放在一个开源项目中,我希望包含我的
cscfg
文件,但显然我不能这样做,因为它会公开我的私人数据。像我现在所做的那样,将它们放在
.gitignore
中,会给任何试图克隆存储库的人带来编译方面的麻烦

有没有办法使我的
cscfg
文件安全


编辑:请注意,这不是关于在开源项目中隐藏敏感数据的一般问题。有几种策略可以实现这一点,具体取决于您正在处理的项目类型。对于web角色来说,实现这些标准解决方案中的任何一个都是非常困难的,尝试这样做可能会破坏构建。最明显的答案是
.gitignore
整个
ccproj
云服务项目,并且只允许合作者访问相关的web项目。

答案没有听起来那么滑稽:不要使用云服务

对于web项目,您可以在
.gitignore
文件中使用显式忽略的配置转换。与Web角色没有如此清晰的分离


真正的线索是,在Azure门户中,云服务现在被附加上了诅咒状(Classic),这几乎是微软产品团队可以发誓的。现在强烈鼓励开发人员转而构建应用程序服务,这些服务提供了一套更丰富的工具,用于在隐藏敏感数据的同时公开源代码。我现在正在升级,我想从长远来看,这会为我节省很多麻烦。

答案没有听起来那么好笑:不要使用云服务

对于web项目,您可以在
.gitignore
文件中使用显式忽略的配置转换。与Web角色没有如此清晰的分离


真正的线索是,在Azure门户中,云服务现在被附加上了诅咒状(Classic),这几乎是微软产品团队可以发誓的。现在强烈鼓励开发人员转而构建应用程序服务,这些服务提供了一套更丰富的工具,用于在隐藏敏感数据的同时公开源代码。我现在正在升级,我想从长远来看,这会为我节省很多麻烦。

这是Azure特有的。将生成诊断连接字符串。这个问题的公认答案是指不同语言的不同环境;其他的都太普通了,不值得关注。你为什么不把这些东西存储在应用程序设置中?我被这个问题弄糊涂了:为什么你觉得你需要发布订阅的密钥,仅仅因为它是一个开源项目?这毫无意义。嗨,大卫,这简直是“开箱即用”。如果您从模板创建云服务,并选择包含诊断,则会自动发布设置
Microsoft.WindowsAzure.Plugins.diagnostics.ConnectionString
,并由诊断基础架构在内部使用。类似地,如果指定要执行远程调试,则会自动生成
RemoteAccess
RemoteForwarder
设置。关键是我不想发布密钥,老实说,我不知道在我的问题中,你会从哪里得出我想这样做的结论。这是针对Azure的。将生成诊断连接字符串。这个问题的公认答案是指不同语言的不同环境;其他的都太普通了,不值得关注。你为什么不把这些东西存储在应用程序设置中?我被这个问题弄糊涂了:为什么你觉得你需要发布订阅的密钥,仅仅因为它是一个开源项目?这毫无意义。嗨,大卫,这简直是“开箱即用”。如果您从模板创建云服务,并选择包含诊断,则会自动发布设置
Microsoft.WindowsAzure.Plugins.diagnostics.ConnectionString
,并由诊断基础架构在内部使用。类似地,如果指定要执行远程调试,则会自动生成
RemoteAccess
RemoteForwarder
设置。关键是我不想发布密钥,老实说,我不知道在我的问题中你会从哪里得出我想这样做的结论。