【问题标题】:Securing user/password for REST API保护 REST API 的用户/密码
【发布时间】:2013-05-16 03:29:30
【问题描述】:

我在安全的 ASP.NET 网站上有一个 Web 服务 REST API,需要登录才能工作。以编程方式请求用户名/密码的最安全方法是什么? (在 URL 中添加 ?username=me&password=mysecret 对我来说似乎并不那么安全(即使这是一个 HTTPS 连接)。

【问题讨论】:

    标签: asp.net security rest login


    【解决方案1】:

    有几种方法可以实现您的需要:

    • [错误方式] 可以将用户名和密码与查询字符串一起传递。从理论上讲,这种做法没有任何问题,但是这样的 URL (http://example.com?username=me&password=mysecret) 通常会被浏览器、代理等缓存,从而利用其他人可以通过使用这些存储的数据访问您的受保护数据的潜在风险。
    • [GOOD WAY] 为了消除与浏览器、代理等缓存能力相关的“几乎所有”风险,并且为了使用 HTTP 协议的标准特性,您必须处理特殊的HTTP Authorization header .

    HTTP 授权标头:

    授权头构造如下:

    1. 用户名和密码组合成一个字符串“用户名:密码”。

    2. 然后使用 Base64 对生成的字符串文字进行编码。

    3. 然后将授权方法和空格(即“Basic”)放在编码字符串之前。

      例如,如果用户代理使用“Aladdin”作为用户名,使用“open sesame”作为密码,那么标头的格式如下:

      Authorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==

    • 如果您使用的是 HTTP 连接,那么您应该使用Digest Access Authentication 方法。因为 HTTPS 连接更复杂且无用,如果您愿意,我让您阅读更多相关信息(here 可能)。

    【讨论】:

    • 我强烈反对您的介绍性条款“理论上这种做法没有任何问题”。将凭据放入 URL 是完全错误的 - 即使在理论上 - 原因与您所说的完全相同。即使您使用 SSL/TLS 进行加密,这也只会影响 HTTP 请求的内容。 URL 始终以明文形式发送。因此,选项一不仅是利用潜在风险,而且是完全错误的。
    猜你喜欢
    • 2016-08-17
    • 2012-01-23
    • 1970-01-01
    • 2019-06-03
    • 2017-04-15
    • 2014-12-21
    • 1970-01-01
    • 2018-07-23
    相关资源
    最近更新 更多