Oauth 为什么要对授权头进行base64编码?

Oauth 为什么要对授权头进行base64编码?,oauth,oauth-2.0,base64,twitter-oauth,bearer-token,Oauth,Oauth 2.0,Base64,Twitter Oauth,Bearer Token,Twitter的API要求发送一个授权头,该授权头是API密钥的base64编码,与API密钥连接在一起。在节点中,我使用: var base64 = new Buffer(apiKey + ':' + apiSecret).toString('base64'); 发送的标头将变为: Authorization: 'Basic ' + base64 base64编码字符串“apiKeyHere:apiSecretHere”有什么意义?为什么不接受包含原始api凭据的授权标头 这个问题与我的问

Twitter的API要求发送一个授权头,该授权头是API密钥的base64编码,与API密钥连接在一起。在节点中,我使用:

var base64 = new Buffer(apiKey + ':' + apiSecret).toString('base64');
发送的标头将变为:

Authorization: 'Basic ' + base64
base64编码字符串“apiKeyHere:apiSecretHere”有什么意义?为什么不接受包含原始api凭据的授权标头

这个问题与我的问题相似,但投票的答案并不能完全回答我的问题。Twitter的api密钥和api密钥已经是HTTP兼容字符。它们看起来像这样(这些不是真的):

消费者密钥(API密钥)8dme3utVQfOhlPk5BUG9XbFxR

消费者机密(API机密)QFZXOC7MP72JZTGMBNPJLGI4VL1XR1Q9DYPLP3U7JGTKESPLM


那么为什么base64对其进行编码呢?此外,该帖子还指出,“编码的目的是将用户名或密码中不兼容HTTP的字符编码为兼容HTTP的字符。”用户名和密码不是已经是兼容HTTP的字符吗?

基本身份验证方案在(和旧的)中描述

这是向服务器发送密码凭据的标准方式。
base64编码用于对凭据进行编码,以允许发送非HTTP字符和多字节字符串。

尽管我在w3文档中找不到它,但我相信它只是将授权头的凭据编码为base64的协议,不管它有什么内容。在Twitter中,它与您所说的没有多大区别,但在其他情况下,凭证可以包含这些字符。为了保持一致性并防止是否应该对其进行编码的错误,所有凭证都应该进行编码


另一个原因可能是,浏览器也以同样的方式对凭证进行编码。Twitter可能也想接受这一点。

默认情况下,
超文本传输协议(HTTP)
消息中的消息头字段参数不能携带ISO-8859-1字符集之外的字符

若用户名和密码包含不兼容的字符集,HTTP将无法携带这些文本。 为了防止出现这种情况,我们使用base64对用户名和密码进行编码,以确保通过HTTPHTTP发送与HTTP兼容的字符。
有关详细信息,请参见此

字符串应采用base64编码,这不是出于安全考虑,而是为了将不兼容HTTP的字符编码为可能位于用户名或密码中的兼容HTTP的字符。

我想可能是重复的,这在某种程度上回答了这个问题,但不是完全正确的。该答案指出“编码的目的是将用户名或密码中可能存在的不兼容HTTP的字符编码为兼容HTTP的字符。”。来自Twiter的apiKey和apiSecret已经是HTTP兼容字符。用户名和密码不是已经是HTTP兼容字符了吗?谢谢。你能想象一个数据不包含HTTP兼容字符的情况吗?任何用户名或密码包含任何非ASCII字符的情况,以及上述任何令牌分隔符的情况。(见问题。)