这可能是一个基础问题,但在进行HTTP或HTTPS基本身份验证时,用户名中是否可以有冒号(“:”)?如果不行,我们是否有办法转义冒号?
这个问题很简单,HTTP或HTTPS基本身份验证使用的是Base64编码,而Base64编码中使用了冒号(“:”)作为分隔符,因此用户名中不能出现冒号。如果您需要在用户名中使用冒号,则需要将其转义为其他字符。
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
基于此,无法在用户名中使用冒号。
查看RFC - https://www.rfc-editor.org/rfc/rfc2617#section-2 以及其他网站,似乎没有对用户名中的冒号进行转义的技术。唯一可以额外使用它的地方是在密码字段中。
如果可行,您可以在认证级别中将 : 替换为 @ 并要求用户这样做。