如何在WP8应用中安全的使用Azure Blob存储

在前面一篇文章中,我们演示了在Windows store应用中安全的使用Azure Blob存储的步骤。Windows Phone上的步骤与此类似,只是在客户端代码以及设置方面有一些区别。但是为了方便读者阅读,我这里将就Windows Phone应用中如何安全的使用Azure Blob存储单独写一遍。这样对于Windows Phone开发者来说,只需要看这篇文章就够了。 我们已经在这篇文章中演示了在Windows Phone应用中使用Azure Blob存储的基本步骤,但是,对于一个商业应用来说,保证数据的安全性是很重要的一环。上次文章的代码中,对Blob的访问权限是通过PublicAccess来控制的,理论上如果PublicAccess设置为OFF,那么第三方就应该无法访问该Blob。但是这里有一个明显的安全隐患:我们的代码中明文存储了Access Key字符串,而通过一些反编译工具第三方能够很容易的获得这个字符串。如果这个Access Key被暴露的话,那么Blob中的内容就毫无秘密可言了。为此,我们需要找到一个可靠的办法来保证验证信息的安全。 为了解决这个问题,我们需要做到以下两条: 1.保证用户在未经授权的情况下无法获得验证信息。 2.用户通过授权后获得的验证信息不能被重复使用。 对于第一条,我们可以自己建立一个服务器,与该服务器的连接需要先进行身份验证,然后从服务器上获得用于连接Windows Azure 存储服务的验证信息。不过我们既然已经使用了Windows Azure,那么完全可以使用Windows Azure  云服务来为我们做同样的事情。 对于第二条,Windows Azure 存储服务提供了共享访问签名(Shared Access Signature)来保证验证信息的时效性。共享访问签名是一个在特定时间间隔内授予容器、Blob以及其他存储对象受限访问权限的 URI。也就是说,共享访问签名是一个URI, 客户端通过这个URI能够在规定时间内访问容器和Blob, 而超过了时间段的话这个URI就无效了,需要重新获取。 结合这两种方式,那么我们就能够实现对验证信息的保护了。我们将生成共享访问签名的代码放在Windows Azure云服务上,客户端通过访问云服务接口获得共享访问签名来访问Windows Azure存储服务商的Blob。 那么让我们来看看如果要安全的实现与前一篇文章相同的功能所需要完成的步骤。 一.   创建云服务并实现服务接口: 1. 从以下链接下载并安装Azure Cloud Service SDK For .NET: http://www.windowsazure.com/en-us/downloads/?sdk=net 针对不同的Visual Studio版本,您需要安装相应的SDK,这样在您的Visual Studio的项目模板中会出现Azure Cloud Service的模板。 2. 通过Azure Cloud Service模板创建一个Cloud服务,在项目向导中加入WCF Service Web Role:  …

0

如何在Windows store应用中安全的使用Azure Blob存储(2)

三. 进一步提高WCF Service的可靠性和安全性 我们已经实现了对Windows Azure上Blob数据的安全存取。但是这还不足以应用到生产环境。在生产环境,我们还需要保证WCF Service的高可靠性。设置服务器的负载均衡是一个很好的解决办法。下面就让我们来介绍一下如何修改WCFServiceWebRole1的设定以实现负载均衡。 1.在Cloud Service项目WindowsAzure1的Roles文件夹中,右键点击WCFServiceWebRole1选择Properties打开属性页。   2.在Configuration页面中将Instance count设为2或更多,Windows Azure会该为Cloud Service创建相应数目虚拟机做负载平衡。这样如果其中一台虚拟机出问题的时候其他虚拟机还能继续服务,从而保证了服务的稳定性。   另外,第三方还有可能通过抓包的方式来获取身份验证及数据信息,虽然因为我们使用了共享访问签名,可以设置该身份验证信息的有效时间,但还是可能形成隐患。为了避免这种情况,我们需要实现与Windows Azure的https连接。由于客户端和Storage Service的连接已经是https的了,所以这里只需要关心客户端和Cloud Service的连接设置。下面就是设定与Cloud Service的通讯为https连接的步骤: 1.为了采用https连接,我们需要一张SSL证书。而在实际生产环境中,您需要使用一张受信任的证书或者公司颁发的证书。出于演示目的,这里我使用了一张自签名的证书,在Developer Command Prompt for VS2013中以管理员身份运行makecert命令可以帮助我们创建一张自签名证书: C:\>makecert -r -pe -n CN=”sasservice.cloudapp.net ” -b 03/13/2014 -e 03/13/2015 -eku 1.3.6.1.5.5.7.3.1 -sky exchange -sp “Microsoft RSA SChannel Cryptographic Provider” -sy 12 -sv sasCert.pvk sasCert.cer 2.期间您需要设定并输入私钥的保护口令。生成的证书包含两个文件,一个是pvk文件,用于存储证书私钥,一个是cer文件,用于存储证书公钥。关于如何使用makecert命令的详细信息,您可以参考以下链接: http://msdn.microsoft.com/zh-cn/library/bfsktky3(v=vs.110).aspx 3.接下来您需要用pvk2pfx命令生成pfx文件以供后用: C:\>pvk2pfx -pvk sasCert.pvk  -pi…

0

如何在Windows store应用中安全的使用Azure Blob存储(1)

在上一篇文章中,我们演示了在Windows store应用中使用Azure Blob存储的基本步骤,但是,对于一个商业应用来说,保证数据的安全性是很重要的一环。上一篇文章的代码中,对Blob的访问权限是通过PublicAccess来控制的,理论上如果PublicAccess设置为OFF,那么第三方就应该无法访问该Blob。但是这里有一个明显的安全隐患:我们的代码中明文存储了Access Key字符串,而通过一些反编译工具第三方能够很容易的获得这个字符串。如果这个Access Key被暴露的话,那么Blob中的内容就毫无秘密可言了。为此,我们需要找到一个可靠的办法来保证验证信息的安全。 为了解决这个问题,我们需要做到以下两条: 1.保证用户在未经授权的情况下无法获得验证信息。 2.用户通过授权后获得的验证信息不能被重复使用。 对于第一条,我们可以自己建立一个服务器,与该服务器的连接需要先进行身份验证,然后从服务器上获得用于连接Windows Azure 存储服务的验证信息。不过我们既然已经使用了Windows Azure,那么完全可以使用Windows Azure  云服务来为我们做同样的事情。 对于第二条,Windows Azure 存储服务提供了共享访问签名(Shared Access Signature)来保证验证信息的时效性。共享访问签名是一个在特定时间间隔内授予容器、Blob以及其他存储对象受限访问权限的 URI。也就是说,共享访问签名是一个URI, 客户端通过这个URI能够在规定时间内访问容器和Blob, 而超过了时间段的话这个URI就无效了,需要重新获取。 结合这两种方式,那么我们就能够实现对验证信息的保护了。我们将生成共享访问签名的代码放在Windows Azure云服务上,客户端通过访问云服务接口获得共享访问签名来访问Windows Azure存储服务商的Blob。 那么让我们来看看如果要安全的实现与前一篇文章相同的功能所需要完成的步骤。 一.   创建云服务并实现服务接口: 1. 从以下链接下载并安装Azure Cloud Service SDK For .NET: http://www.windowsazure.com/en-us/downloads/?sdk=net 针对不同的Visual Studio版本,您需要安装相应的SDK,这样在您的Visual Studio的项目模板中会出现Azure Cloud Service的模板。 2. 通过Azure Cloud Service模板创建一个Cloud服务,在项目向导中加入WCF Service Web Role:   完成后项目向导会自动建立两个项目,一个是Cloud Service项目WindowsAzure1,另一个是提供WCF Service的Web Role项目WCFServiceWebRole1。WCFServiceWebRole1中会生成一个名为IService1的接口及实现该接口Service1类。   3.  修改WCFServiceWebRole1项目中的IService1接口添加用于获取共享访问签名的接口函数:…

0