安全地向RESTful服务发送敏感信息

时间:2015-07-22 14:28:53

标签: c# rest security azure ssl

所以我已经搜索并尝试将我发现的各种信息拼凑在一起,如果 这些信息存在于其他地方,我会道歉。我不是一名安全专家,我想确保我这样做是为了不引入一些疯狂的安全漏洞。

我在C#中开发一个RESTful服务,该服务将托管在Azure上,允许用户使用用户名和密码登录,然后对该服务的后续调用将与该用户相关联。这项服务的第一个客户将是一个通过javascript与服务进行通信的网络应用程序(不确定是否会使它与众不同)。

所以,这就是我作为工作流程提出的:

  • 用户登陆网站
  • 用户输入用户名和密码
  • 信息发送到服务
    • 这是我的细节最少的地方
  • 服务验证用户凭据
  • 服务返回将由后续服务调用使用的令牌

我已经阅读过有关SSL的信息,我知道Azure支持SSL证书,但我并不是100%确定它是我所寻找的一切。只需拥有SSL证书并使用HTTPS,是否可以将纯文本用户信息发送到我的服务?这听起来不对。如果没有,我还需要做些什么来安全地将此(以及可能的其他)敏感信息发送到我的服务?

提前感谢您的帮助。

2 个答案:

答案 0 :(得分:0)

如果您的应用程序正在通过JavaScript与Azure托管的服务进行通信,那么您需要查看ADAL.js。 Vittorio Bertocci详细描述了如何在this article中保护这样的应用程序。

使用SSL / TLS时,传输通道已加密,因此拦截数据包的任何人都无法读取明文。您显然仍需要保护您的应用程序免受可能导致信息泄露的其他攻击(如SQL注入等)。查看OWASP top 10 cheat sheet了解更多信息。

答案 1 :(得分:0)

您可以查看Azure如何为服务总线等实现自己的REST API。它使用共享访问密钥。客户端不是将用户标识和密码发送到REST API,而是形成认证字符串,并使用共享密钥创建认证字符串的散列,并将字符串发送到服务器。然后,REST API身份验证逻辑将形成相同的信息,如果它到达相同的哈希值,则对客户端进行身份验证,并将可用于后续调用的令牌发送到客户端。 共享密钥增加了另一层安全性,而不仅仅是通过https发送密码。

查看MSDN上的服务总线示例代码Service Bus Brokered Messaging REST Tutorial。特别是"步骤3:创建管理凭证"描述了这个过程。