在简单Web服务中保护用户名和密码(HTTP)-C#

在简单Web服务中保护用户名和密码(HTTP)-C#,c#,wcf,security,authentication,oauth,C#,Wcf,Security,Authentication,Oauth,我正在开发一个rest WCF web服务,其中我的客户机将使用HTTP调用该服务。将使用用户名和密码对用户进行身份验证(基本身份验证) 我脑子里有以下问题 1。如何保护我的用户名和密码? 在互联网上搜索时,许多人建议使用HTTPS/OAUTH/OPENID。我觉得以下是使用这些方法的冲突 OAUTH/OPENID->这需要第三方对我的用户进行身份验证。如果我只在我的系统中存储用户详细信息怎么办??在这样的功能中,我是否可以实现oAuth?基于我的假设。OAuth使用令牌对用户进行身份验证,说

我正在开发一个rest WCF web服务,其中我的客户机将使用HTTP调用该服务。将使用用户名和密码对用户进行身份验证(基本身份验证) 我脑子里有以下问题

1。如何保护我的用户名和密码? 在互联网上搜索时,许多人建议使用HTTPS/OAUTH/OPENID。我觉得以下是使用这些方法的冲突

  • OAUTH/OPENID->这需要第三方对我的用户进行身份验证。如果我只在我的系统中存储用户详细信息怎么办??在这样的功能中,我是否可以实现oAuth?基于我的假设。OAuth使用令牌对用户进行身份验证,说明如何避免中间人攻击。比如说,如果攻击者获得了令牌,或者如果他获得了整个URL,该怎么办?您可以向服务器发出请求吗
  • HTTPS:根据互联网上的许多评论,这是最好的。我非常肯定HTTPS将保护客户端和服务器之间的数据传输,但我想知道它是否也保护URL(我们存储用户名和密码的地方)

> P>避免中间人攻击的最好方法是使用HTTPS服务器并验证客户端上的证书。如果您使用浏览器作为客户端,这将自动为您完成

无论您是传递用户名和密码还是承载令牌,您都需要HTTPS来保护它们不被同一网络上的任何人窃取

在每个请求中发送密码是个坏主意,原因有很多,我已经描述过了。我建议您考虑使用承载令牌,以防您的服务是WCF REST服务或SAML保护的绑定(如果您使用的是SOAP服务)

您没有提到您的客户机是web应用程序还是本机客户机,或者该服务是否在internet或公司防火墙中公开。所有这些因素都会影响有关安全的决策

OAuth不是唯一基于令牌的身份验证机制。对于企业应用程序,您可以查看WS-Federation/WS-Trust和ADF。
此外,OAuth授权服务器不必是外部方,您可以将授权服务器部署为应用程序的一部分。

URL中的用户名和密码似乎是一个安全故障,无论您做什么,URL都会进入日志等。将其放入正文的坏性更小(更好:使用摘要身份验证;最好:OAuth等). 在所有情况下都使用HTTPS(很难证明任何API都需要身份验证,而不是现在的HTTPS,如果只是用于服务器验证的话)。