【问题标题】:Authentication approaches for WCF RESTWCF REST 的身份验证方法
【发布时间】:2011-09-11 22:55:12
【问题描述】:

我有一个 WCF REST 文件服务器,它通过在每个请求中输入两个附加参数(用户名和密码)来验证用户。例如,System.IO.Stream Download(string username, string password, int fileid)

我想对所有方法都使用 GET,但我不能这样做,因为我不希望在地址栏中显示用户名和密码。相反,我使用的 POST 并不完全是防弹的,但在这种情况下仍然是比 GET 更好的选择。

除了基本的 HTTP 身份验证之外,还有其他更好的用户验证方法吗?最好是让我使用 GET 而不必在 URL 中包含用户名和密码的东西。

【问题讨论】:

标签: c# wcf rest


【解决方案1】:

试图通过将 Http 方法从 GET 更改为 POST 来隐藏用户名和密码,基本上没有增加安全性。即使是非常缺乏技术挑战的人也可以使用几乎任何程序来查看正在发送到服务器的数据。

现在除了明显的用户名密码问题之外,您可以使用 HTTP 标头而不是 QueryString 参数将值传递回 WCF 服务 (RESTful)。这将允许您使用 GET 方法并仍然传递用户名和密码,而 URL 中不存在这些特定值,但同样,这实际上并没有增加安全性。

【讨论】:

  • HTTP 标头不会也以明文形式发送吗?与 POST 相比,他们有什么优势?
  • +1 是的,在安全上下文中使用 HTTP 标头而不是 Post 没有任何优势。具体来说,问题是是否有 GET 或 POST 的替代解决方案。 HTTP 标头是一种替代解决方案。
  • 那么我想加密将是保护用户凭据的唯一“正确”方法。回到我最初的问题,在非安全上下文中,标头比 POST 有什么优势?
  • 职责分离。被调用的方法不负责知道天气或没有验证呼叫,这应该在此之前发生。因此,在这种情况下,最好将身份验证信息与方法信息分开。有许多应用程序(谷歌日历 api 和亚马逊服务),其中不特定于调用的特定值在标头中传递,而不是在查询字符串或发布数据中传递。出于这个原因,这是“更好”的,因为 OP 从未提及“更好”是什么(以编程方式、安全性等)的细节
猜你喜欢
  • 1970-01-01
  • 2015-04-14
  • 2011-03-27
  • 1970-01-01
  • 1970-01-01
  • 2012-03-06
  • 1970-01-01
  • 1970-01-01
  • 2011-02-04
相关资源
最近更新 更多