这是有效的HTTP授权标头吗?

时间:2019-03-21 02:32:37

标签: http http-headers

使用Wireshark,我已经看到iOS Philips Remote TV应用程序与运行他们的新OS Saphi的Philips TV进行通信时,会发送一些带有授权标头的HTTP请求,如下所示:

授权:基本1:ZmVay1EQVFOaZhwQ4Kv81ypLAZNczV9sG4KkseXWn1NEk6cXmPKO / MCa9sryslvLCFMnNe4Z4CPXzToowvhHvA ==

我相信“ 1”是用户名,并与带有“:”的长密码分开。

在Wikipedia中我读到了 授权字段的构造如下:

  1. 用户名和密码用单个冒号(:)组合。

  2. 使用Base64的变体将生成的字符串编码为八位字节序列。

  3. 然后将授权方法和空格(例如“ Basic”)放在编码后的字符串之前。

例如,如果浏览器使用Aladdin作为用户名,使用OpenSesame作为密码,则该字段的值为Aladdin:OpenSesame或QWxhZGRpbjpPcGVuU2VzYW11l的base64编码。

然后授权标题将显示为:

授权:基本QWxhZGRpbjpPcGVuU2VzYW1l

因此,我想知道此应用程序中使用的Authorization标头是否有效-跳过上面的编码步骤2,看起来像什么?

1 个答案:

答案 0 :(得分:1)

您发布的标头违反了RFC 7235,它禁止在授权令牌中使用冒号(:):

Authorization = credentials

credentials   = auth-scheme [ 1*SP ( token68 / #auth-param ) ]

token68       = 1*( ALPHA / DIGIT /
                    "-" / "." / "_" / "~" / "+" / "/" ) *"="

正如您正确指出的那样,Basic authentication在结合了用户名和密码后被编码为Base64 。您发布的示例在冒号后包含有效的Base64,但它会解码为一些二进制垃圾。

此飞利浦软件的开发人员可能错误地将自定义身份验证方案标记为Basic。这不是一个罕见的错误。典型的情况是发送令牌时不使用Base64,例如Basic MySecretToken123