AuthenticationHeaderValue中的冒号字符

时间:2014-09-11 09:51:44

标签: c# authentication

在阅读有关基本身份验证的内容时,我总能找到与此类似的示例:

HttpClient sClient new HttpClient();
sClient.DefaultRequestHeaders.Authorization = 
  new AuthenticationHeaderValue("Basic",Convert.ToBase64String(System.Text.ASCIIEncoding.ASCII.GetBytes("UserName:Password")));

对我来说,这似乎意味着冒号字符“:”不应该用在密码中。这是否意味着密码和用户名应禁止冒号?

这是基本身份验证的一般假设吗?如果您的凭据中存在包含现有冒号字符的现有用户库,如何处理此问题。

1 个答案:

答案 0 :(得分:3)

从技术上讲,用户名中禁止使用:https://www.ietf.org/rfc/rfc2617.txt

To receive authorization, the client sends the userid and password,
separated by a single colon (":") character, within a base64 [7]
encoded string in the credentials.

  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

值得注意的是:RFC2617没有说明如果用户名包含冒号该怎么办。 IE和Firefox都只是简单地包含它,可能是最糟糕的选择。

如果您的用户名包含:,则应该将其 - %3a% - 以将其与分隔符区分开来。服务器是否支持这取决于服务器。

说了这么多,HTTP Basic是一个非常糟糕的身份验证方案;使用更好地保护客户端凭据的东西是更好的选择。