使用Wireshark,我已经看到iOS Philips Remote TV应用程序与运行他们的新OS Saphi的Philips TV进行通信时,会发送一些带有授权标头的HTTP请求,如下所示:
授权:基本1:ZmVay1EQVFOaZhwQ4Kv81ypLAZNczV9sG4KkseXWn1NEk6cXmPKO / MCa9sryslvLCFMnNe4Z4CPXzToowvhHvA ==
我相信“ 1”是用户名,并与带有“:”的长密码分开。
在Wikipedia中我读到了 授权字段的构造如下:
用户名和密码用单个冒号(:)组合。
使用Base64的变体将生成的字符串编码为八位字节序列。
然后将授权方法和空格(例如“ Basic”)放在编码后的字符串之前。
例如,如果浏览器使用Aladdin作为用户名,使用OpenSesame作为密码,则该字段的值为Aladdin:OpenSesame或QWxhZGRpbjpPcGVuU2VzYW11l的base64编码。
然后授权标题将显示为:
授权:基本QWxhZGRpbjpPcGVuU2VzYW1l
因此,我想知道此应用程序中使用的Authorization标头是否有效-跳过上面的编码步骤2,看起来像什么?
答案 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
。