当比较X-Auth-Token和Authorization头部时,哪个更受欢迎?

71

以下两个头部信息有什么区别?
哪一个更好?

  1. X-Auth-Token : dadas123sad12

  2. Authorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==


1
嗨,Deepak,欢迎来到 Stack Overflow。这是一个非常广泛的问题 - 你能解释一下你已经了解的两种不同的授权头部信息,以及你需要如何/为什么需要在它们之间进行选择吗? - Vince Bowdren
1
我只想知道两者之间的区别。为了将其附加到来自RESTful服务的JWT令牌中。所以不确定使用哪种类型的标头。@VinceBowdren - Deepak
基本上,授权:基本用于登录,然后返回一个生成的令牌,该令牌在进一步的请求中返回,以证明你是谁。 - G_V
1
@G_V:它们是否完全具有相同的目的?我知道 'x-auth-token' 用于在用户使用凭据登录后交换身份验证令牌。不确定 'Authorization: Basic' 的作用.. - user18853
@user18853 'Authorization: Basic' = 发送 user:pass 以获取令牌。'x-auth-token' = 发送令牌。 - G_V
4个回答

64

Authorization 是客户端在 HTTP 中用于对等方进行身份验证的主要标头,如 RFC 7235 所预见。通常与 RFC 7617 的基本认证方案有关,但并非必须。

Basic 方案允许客户端提供一个用户名-密码对,用冒号(:)分隔并以 Base64 编码。不能强调这是一种仅提供传输编码而不提供真正安全性的编码方式。例如,您提供的示例可以轻松地“解密”为 Aladdin:open sesame

通过 IANA HTTP 认证方案注册表 (也请参阅:RFC 7235,第5.1节),您将找到与 OAuth 2.0 密切相关的 Bearer 方案(在 RFC 6750 中定义)。X-Auth-Token 在这里几乎提供了一条捷径,因为它(可能)既不依赖于 OAuth,也不依赖于 HTTP 认证框架。

请注意,X-Auth-Token 是一个未注册的标头,因此不受任何正式规格的约束,其存在和内容始终与相应的应用程序相关联。不能对它作出一般性假设。


33

'Authorization: Basic' 表示基本认证,浏览器/客户端必须在每个请求中提供用户名和密码。

对于 'x-auth-token',用户第一次需要提供用户名和密码,服务器会在头字段 'x-auth-token' 中返回访问令牌。对于后续的会话,将交换此令牌,而不是用户名/密码。


4
“在'x-auth-token'的情况下...”你怎么知道呢?这是一个非标准的身份验证方案,不属于官方认证框架 - DaSourcerer
@DaSourcerer,我已经有一段时间没有关注这个问题了,但是我验证了Spring框架中的实现(包括基本身份验证和x-auth-token),并且它是正确的。 - user18853
6
啊,我的错。我没有意识到这个问题是特指Spring的;我只是假定它是一般情况。 - DaSourcerer

1
在普通的“基本”授权情况下,您需要提供这样的字符串:
"Basic " + Buffer.from("username:password").toString("base64");

对于客户端JavaScript,您可以检查window.atob()函数以将字符串编码为base64。

在X-Authorization的情况下,用户必须首次向服务器传递其用户名/密码,并且服务器会响应此X-Authorization令牌,在那个会话中,用户进行的每个api调用都只使用该X-auth令牌而不是其凭据。


0

[解决方案] 当您收到以下响应时,您必须在Outh令牌前加上"Bearer"前缀。

{    "errorCode": 401,
"errorDesc": "Full authentication is required to access this resource",
"_userDesc": "Unauthorized"}

应该是以下的授权头部信息

Bearer  eyJraWQiOiJrOTgwMy4xNTk5ODQyODg3IiwiYWxnIjoiUlM1MTIifQ....

问题将会得到解决。 谢谢。


这是解决什么问题的方案? - undefined

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