我已经看到很多在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设置为加密)
您不是简单地将字符串转换为字节然后再返回.实际上,您从常规字符串开始,最后使用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.GetBytes将myUser:myPwd转换为字节数组(更具体地说,109,121,85,115,101,114,58,109,121,80,119,100).
然后,Convert.ToBase64String获取这些字节并将它们转换为如下所示的字符串:bXlVc2VyOm15UHdk
这是您的HTTP服务器期望的经典Base64编码字符串.最后,第三行准备格式为"Basic bXlVc2VyOm15UHdk"的头条目,该条目符合Authorization字段的HTTP规范.
您可以在维基百科上了解有关此类授权的更多信息.