也许我遗漏了什么,或者.NET遗漏了什么(最好是前一个)
当构建应用程序(不完全是ASP.NET,但这是我的情况;特别是承载ASP.NET的WCF DS)时,似乎没有从HttpRequest
或任何类似的请求/标头容器创建NetworkCredential
对象的本机方法,。
我们总是要自己滚动吗,或者System.Net.*
或System.Web.*
中是否隐藏着一些神奇的东西,比如:
NetworkCredential GetAuthorization(HttpRequest request);
我知道这是微不足道的,但我认为HTTP体系结构的标准内容将包含在其他内容中(.NET)
那么,自制字符串操作,还是隐藏在某个地方的神奇方法?
我不认为有任何内置功能;它的用途有限,因为大多数客户端都使用Kerberos或摘要式身份验证。
然而,推出自己的相当简单
static NetworkCredential ParseBasicAuthorizationHeader(string value)
{
if (string.IsNullOrWhiteSpace(value))
{
return null;
}
if (!value.StartsWith("Basic ", StringComparison.OrdinalIgnoreCase))
{
return null;
}
byte[] data = Convert.FromBase64String(value.Substring(6));
value = Encoding.GetEncoding("ISO-8859-1").GetString(data);
int index = value.IndexOf(':');
if (index == -1 || index == 0 || index == value.Length - 1)
{
return null;
}
return new NetworkCredential(
value.Substring(0, index), // Username
value.Substring(index + 1)); // Password
}
请记住,与所有其他HTTP标头一样,Authorization
标头完全由客户端控制,因此应被视为不受信任的用户输入。