C# 安全地将敏感信息发送到RESTful服务

C# 安全地将敏感信息发送到RESTful服务,c#,rest,security,azure,ssl,C#,Rest,Security,Azure,Ssl,因此,我搜索并试图拼凑我找到的各种信息,如果这些信息确实存在于其他地方,我表示歉意。作为一名安全专业人员,我希望确保我正确地执行此操作,以免引入一些疯狂的安全漏洞 我正在用C#开发一个RESTful服务,它将托管在Azure上,允许用户使用用户名和密码登录,然后对该服务的后续调用将与该用户关联。该服务的第一个客户端将是一个通过javascript与该服务通信的web应用程序(不确定这是否会使它有所不同) 下面是我提出的工作流程: 用户登陆网站 用户输入用户名和密码 信息被发送到服务 这是我拥

因此,我搜索并试图拼凑我找到的各种信息,如果这些信息确实存在于其他地方,我表示歉意。作为一名安全专业人员,我希望确保我正确地执行此操作,以免引入一些疯狂的安全漏洞

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

下面是我提出的工作流程:

  • 用户登陆网站
  • 用户输入用户名和密码
  • 信息被发送到服务
    • 这是我拥有最少细节的地方
  • 服务验证用户凭据
  • 服务返回由后续服务调用使用的令牌
我读过关于SSL的文章,我知道Azure支持SSL证书,但我不能100%确定这是我想要的一切。仅仅通过使用SSL证书和HTTPS,就可以将纯文本用户信息发送到我的服务吗?听起来不对。如果没有,我还需要做什么才能安全地将此(以及可能的其他)敏感信息发送到我的服务


提前感谢您的帮助。

如果您的应用程序正在通过JavaScript与Azure上托管的服务进行通信,请查看。Vittorio Bertocci准确地描述了如何在中保护这样的应用程序


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

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


查看MSDN上的服务总线示例代码。具体来说,“步骤3:创建管理凭据”描述了这个过程。

我不一定要基于一个客户端(Javascript)实现我的安全性。此外,使用AD解决了一个用户身份验证的单一问题,虽然这是我目前的重点,但并不是全部问题。ADAL库也可用于其他类型的客户端。请看这里的概述:哦,太好了。但广告不只是为了身份吗?我不想在我的Azure广告中填满客户。我假设Azure广告是针对系统管理员、服务帐户等的。不,您可以在AAD中注册用户、组和应用程序。您还可以将用户从本地Active Directory同步到AAD。或者您可以让AAD federate返回到on-prem ADFS进行身份验证。这是管理客户帐户凭据的理想、安全的方法吗?