【问题标题】:Securing Username and Password (HTTP) in Simple WebServices - C#在简单 Web 服务中保护用户名和密码 (HTTP) - C#
【发布时间】:2015-03-27 08:37:20
【问题描述】:

我正在开发一个 REST WCF Web 服务,我的客户端将使用 HTTP 调用该服务。用户将使用用户名和密码进行身份验证(基本身份验证) 我有以下几个问题。

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

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

【问题讨论】:

  • 无论您做什么,URL 中的用户名和密码似乎都是安全故障 - URL 进入日志等。将它们放在正文中不太糟糕(更好:使用摘要身份验证;最好:oauth等等。)。在所有情况下都使用 HTTPS(如果只是为了它提供的服务器验证,很难证明任何 API 都需要身份验证,而不是今天的所有 HTTPS。

标签: c# wcf security authentication oauth


【解决方案1】:

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

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

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

您没有提及您的客户端是 Web 应用程序还是本地客户端,或者该服务是否暴露在 Internet 上或公司防火墙内。所有这些因素都会影响有关安全性的决策。

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

【讨论】:

    猜你喜欢
    • 2020-07-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多