保护Azure Web角色WCF服务的最简单方法

时间:2014-10-27 17:41:27

标签: wcf azure azure-web-roles

使用最新的VS 2013和Azure SDK 2.4,我在其中创建了Web角色和WCF服务。 此服务将由标准生成的.NET服务引用客户端代理使用。

我正在试图找出保护此WCF服务的最简单方法。我的意思是确保身份验证不能被轻易破解,比如明文pwd等。

有关用例的一些其他信息:

  • 只有一个用户
  • 在客户端存储任何秘密(例如用户名/密码或证书)是完全可以的,因为客户端应用程序将在安全的地方运行
  • 我只想阻止公众访问我的服务。只有我运行客户端应用程序的安全位置才能访问它,我不想再这么做了。

所以我在谷歌搜索网络,而且我阅读的更多,我对我认为不需要的选项和可能性感到困惑和不知所措。在搜索客户端证书时,我发现过于复杂的联合身份验证方法与服务器端临时证书等,我不确定我的简单用例需要。

任何帮助表示赞赏。 提前致谢

1 个答案:

答案 0 :(得分:1)

如果你真的想限制访问,那么我会查看客户端证书。在单个SO帖子中配置azure用于客户端证书似乎相当复杂,所以我将引用您参考此博客文章client-certificates-in-windows-azure,我将在下面总结[我最近自己使用了这个,所以我知道它有效]

从本质上讲,您可以使用makecert创建自己的证书[注意:您可能需要为您的站点提供正式的SSL证书,并且只能使用自签名的客户端证书。]

然后,您将站点配置为接受客户端证书 - 通常我会使用appcmd.exe和启动任务,但正如博客文章指出您的站点尚未就绪,因此您需要将其添加到您的webrole { {1}}方法[我实际上最初走了OnStart路径并且非常困惑]。

appcmd.exe

using (var serverManager = new ServerManager()) { try { var siteName = RoleEnvironment.CurrentRoleInstance.Id + "_Web"; var config = serverManager.GetApplicationHostConfiguration(); var accessSection = config.GetSection("system.webServer/security/access", siteName); accessSection["sslFlags"] = @"SslNegotiateCert"; serverManager.CommitChanges(); } catch (Exception ex) { ... } } 中,您可以验证证书,如果您希望(我建议)发送的客户端证书来自您预期的CA(如果是自签名的),或者证书的指纹是您期望的那个(如果只有一个)或上述的组合。