HTTP凭证 - 为什么转换为字节然后转换为字符串

FBr*_*t87 2 c# http

我已经看到很多在HTTP头中包含凭据的示例,它们看起来都是这样的:

string _auth = string.Format("{0}:{1}", "myUser","myPwd");
string _enc = Convert.ToBase64String(Encoding.ASCII.GetBytes(_auth));
string _cred = string.Format("{0} {1}", "Basic", _enc);
req.Headers[HttpRequestHeader.Authorization] = _cred;
Run Code Online (Sandbox Code Playgroud)

凭证字符串将转换为字节数组,然后再转换为字符串.

为什么这样做?什么阻止你发送原始凭据字符串?(假设SSL设置为加密)

LS9*_*S97 6

您不是简单地将字符串转换为字节然后再返回.实际上,您从常规字符串开始,最后使用base64编码的字符串.实际需要代码,因为它将原始auth字符串转换为HTTP服务器期望的格式.

要理解这一点,让我们逐步完成您的代码:

string _auth = string.Format("{0}:{1}", "myUser","myPwd");
Run Code Online (Sandbox Code Playgroud)

这将获取您的用户名和密码并连接它们以创建格式为myUser:myPwd的字符串

string _enc = Convert.ToBase64String(Encoding.ASCII.GetBytes(_auth));
Run Code Online (Sandbox Code Playgroud)

这条线可以分为两部分.在第一组括号内,Encoding.ASCII.GetBytesmyUser:myPwd转换为字节数组(更具体地说,109,121,85,115,101,114,58,109,121,80,119,100).

然后,Convert.ToBase64String获取这些字节并将它们转换为如下所示的字符串:bXlVc2VyOm15UHdk

这是您的HTTP服务器期望的经典Base64编码字符串.最后,第三行准备格式为"Basic bXlVc2VyOm15UHdk"的头条目,该条目符合Authorization字段的HTTP规范.

您可以在维基百科上了解有关此类授权的更多信息.

  • 我认为这个想法是它可以相对容易地扩展到使用二进制数据的系统,例如在使用加密哈希的方案中,但是因为这样的方案根据定义不再是基本身份验证,这不是真正必要的. (2认同)