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

Fra*_*ank 11 basic-authentication

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

在传递用户名和密码方面,我有两个选项(至少),即:

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

我知道这两种方法都不提供加密(因此使用HTTPS/SSL).我也理解为什么使用HTTP GET是一个坏主意.

两种方法之间是否存在任何真正的差异(除了基本认证感觉更加惯用)?

Edd*_*ddy 8

不同之处在于,基本身份验证是一个明确指定的挑战/响应方案,所有浏览器都能理解,并且它是通过告诉客户端它需要(基本)身份验证来启动它的服务器.这会触发浏览器向用户显示一个弹出窗口,输入一个名称/密码,然后按照您的描述将其传递到标题中.

在第二个示例中,您必须以自己的自定义方式执行所有操作,并为用户(等)创建自己的登录表单.

如果您将此过程扣除到将用户名/密码从客户端传递到服务器的单个步骤,我必须同意没有那么大的区别,但基本身份验证意味着不仅仅是这一点.

  • 注意:非常重要的问题是,一旦用户进行了正确的身份验证,就很难让浏览器注销.在某些浏览器上,您需要关闭每个浏览器实例.IE有适当的注销方式,请参阅:http://stackoverflow.com/questions/31326/is-there-a-browser-equivalent-to-ies-clearauthenticationcache/8497804#8497804但其他浏览器则没有. (2认同)