为什么我应该使用HTTP基本身份验证而不是用户名和密码的POST参数?

15

我有一个API端点https://www.example.com/api/authentication,需要输入用户名和密码,并返回身份验证令牌。

在传递用户名和密码方面,我有两种选择(至少),它们分别是:

  1. HTTP基本认证(将凭据作为HTTP标头的一部分传递)
  2. HTTP POST参数

我知道这两种方法都不提供加密(因此要使用HTTPS / SSL)。我也明白为什么使用HTTP GET是不明智的。

除了基本认证更符合习惯之外,这两种方法是否有任何真正的区别?


我认为实际上没有任何区别,不过这是个好问题。 - Ian G
2个回答

13

基本认证(basic authentication)是一种良好规范化的挑战/响应方案,所有浏览器都能理解。服务器通过告知客户端需要(基本)认证来启动该方案。这会触发浏览器向用户显示弹窗以输入用户名和密码,并如你所述将其作为标头传递。

而在第二个例子中,你需要按自己的方式完成以上步骤并为用户创建自己的登录表单等等。

如果将此过程简化为从客户端传递用户名/密码到服务器的单个步骤,我必须同意两者之间没有太大区别,但是基本认证涵盖了更多的内容。


我之前没有考虑到这点,因为我正在处理非浏览器客户端。非常好的答案。 - Frank
4
注意:一个非常重要的问题是,一旦用户已经成功验证身份,让浏览器退出登录非常困难。在某些浏览器上,您需要关闭每个浏览器实例。IE有一种适当的注销方法,请参见:https://dev59.com/OXVD5IYBdhLWcg3wR5go#8497804,但其他浏览器没有。 - AnthonyVO

2
HTTP基本认证实现是强制访问控制Web资源的最简单技术,因为它不需要cookies、会话标识符或登录页面;相反,HTTP基本认证使用HTTP头中的标准字段,省去了握手的步骤。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接