HTTP/HTTPS基本身份验证:用户名中的冒号

34

这可能是一个基础问题,但在进行HTTP或HTTPS基本身份验证时,用户名中是否可以有冒号(“:”)?如果不行,我们是否有办法转义冒号?

这个问题很简单,HTTP或HTTPS基本身份验证使用的是Base64编码,而Base64编码中使用了冒号(“:”)作为分隔符,因此用户名中不能出现冒号。如果您需要在用户名中使用冒号,则需要将其转义为其他字符。

2个回答

37

RFC https://www.rfc-editor.org/rfc/rfc2617#section-2 明确规定用户名不得包含冒号:

客户端发送经过 base64 [7] 编码的字符串,其中包含用户 ID 和密码,中间以单个冒号(“:”)字符分隔,以接收授权。

basic-credentials = base64-user-pass

base64-user-pass = <base64 [4] encoding of user-pass, except not limited to 76 char/line>

user-pass = userid ":" password

userid = * <TEXT excluding ":">

password = *TEXT

基于此,无法在用户名中使用冒号。


11
与此同时,RFC7617已经取代了此方法,更明确地表明:“包含冒号的用户ID不能编码在用户密码字符串中。” - lapo

17

查看RFC - https://www.rfc-editor.org/rfc/rfc2617#section-2 以及其他网站,似乎没有对用户名中的冒号进行转义的技术。唯一可以额外使用它的地方是在密码字段中。

如果可行,您可以在认证级别中将 : 替换为 @ 并要求用户这样做。


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