基本身份验证请求应该是 POST 还是 GET?

Posted

技术标签:

【中文标题】基本身份验证请求应该是 POST 还是 GET?【英文标题】:Should a Basic authentication request be POST or GET? 【发布时间】:2019-08-23 13:19:15 【问题描述】:

我已经看到在 GETPOST 请求中都进行了基本身份验证。

一方面,我认为浏览器缓存 GET 请求可能是一个问题,但另一方面:POST 更大,但鼓励用于传递敏感信息。

我不是在问GETPOST 请求之间的区别,而是应该使用哪一个来进行基本身份验证。 GET 是否应该仅与 HTTPS 一起使用? POST 应该一直使用吗?

我的问题是应该使用哪一个?哪个是更好的做法?

【问题讨论】:

一本好书:Which One is More Secure 【参考方案1】:

GET 是否应该仅用于 HTTPS? POST 应该一直使用吗?

在通过网络发送/请求敏感信息时,无论使用哪种 HTTP 方法,都必须使用 HTTPS。 HTTPS 确保 正文和标头均已加密。

请记住,不得在 URL 中发送敏感信息(例如密码和支付卡号):请求的 URL 可能会被服务器和代理记录;如果浏览器请求 URL,则 URL 会转到浏览器历史记录。然后你就有了安全漏洞。

Basic 身份验证应该使用哪一个?

Basic 身份验证方案不依赖于任何特定的 HTTP 方法。每个HTTP method 都有自己的语义,因此您可能需要不同的方法来设计您的 API。并且这些方法中的每一个都可能执行需要身份验证和/或授权的操作。

RFC 7235 中描述的 HTTP 身份验证框架定义凭据应在 Authorization 标头中发送,因此它们可以应用于任何 HTTP(S) 请求。

同样重要的是要强调身份验证方案,例如 Basic,旨在应用于 保护空间,通常称为 realms(有关详细信息,请参阅我的 previous answer )。

【讨论】:

你的意思是Use HTTP(S) regardless @MOTIVECODEX 哦,是的!固定的!谢谢:) 所以基本上,只要你使用HTTPS并且令牌在授权头中发送,使用GET或POST进行身份验证请求就可以了吗?【参考方案2】:

GET 和 POST 方法都用于在 HTTP 协议中将数据从客户端传输到服务器,但 POST 和 GET 方法的主要区别在于 GET 携带请求参数附加在 URL 字符串中,而 POST 携带请求参数在消息正文中,这使得它更以 http 协议将数据从客户端传输到服务器的安全方式。 所以这取决于你的需求。 希望对您有所帮助!

【讨论】:

以上是关于基本身份验证请求应该是 POST 还是 GET?的主要内容,如果未能解决你的问题,请参考以下文章

使用 Javascript 发出 HTTP POST 身份验证基本请求

Livy REST API:GET 请求有效,但 POST 请求失败并显示“需要 401 身份验证”

启用Azure移动服务身份验证会导致POST请求中的“资源不支持GET”

身份验证过滤器重定向回 Laravel 中的原始 POST 请求

使用 HTTP-Basic 身份验证发出 HTTP GET 请求

使用基本 HTTP 身份验证改造 POST 请求:“无法重试流式 HTTP 正文”