我已经看到很多在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;
凭证字符串将转换为字节数组,然后再转换为字符串。
为什么这样做?什么阻止你发送原始凭据字符串? (假设SSL设置为加密)
答案 0 :(得分:5)
您不是简单地将字符串转换为字节然后再返回。实际上,您从常规字符串开始,最后使用base64编码的字符串。实际上需要代码,因为它将原始的auth字符串转换为HTTP服务器期望的格式。
要理解这一点,让我们逐步完成您的代码:
string _auth = string.Format("{0}:{1}", "myUser","myPwd");
这会使用您的用户名和密码并连接它们以创建格式为 myUser:myPwd
的字符串string _enc = Convert.ToBase64String(Encoding.ASCII.GetBytes(_auth));
这一行可以分为两部分。在第一组括号内,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规范。
您可以在wikipedia上了解有关此类授权的详情。