基本身份验证请求应该是 POST 还是 GET?
Posted
技术标签:
【中文标题】基本身份验证请求应该是 POST 还是 GET?【英文标题】:Should a Basic authentication request be POST or GET? 【发布时间】:2019-08-23 13:19:15 【问题描述】:我已经看到在 GET
和 POST
请求中都进行了基本身份验证。
一方面,我认为浏览器缓存 GET
请求可能是一个问题,但另一方面:POST
更大,但鼓励用于传递敏感信息。
我不是在问GET
和POST
请求之间的区别,而是应该使用哪一个来进行基本身份验证。 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 请求