.NET中的HTTP基本授权

时间:2013-02-12 18:40:56

标签: asp.net .net http-headers http-authentication

也许我错过了一些东西,或者.NET缺少某些东西(最好是前者

构建应用程序时(不仅仅是ASP.NET,但这是我的情况;特别是ASP.NET托管的WCF DS ),似乎没有本地方法来创建NetworkCredential来自HttpRequest的对象,或任何类似的请求/标头容器,。

我们是否总是要自己滚动,或者在System.Net.*System.Web.*中隐藏着一些带有以下签名的魔法:

NetworkCredential GetAuthorization(HttpRequest request);

我知道这是微不足道的,但是我会假设HTTP体系结构的一些标准内容会被包含在其他包含的内容中( .NET

那么,家酿字符串操作,还是隐藏在某处的魔法?

1 个答案:

答案 0 :(得分:1)

我认为没有任何内置的东西;它的用途有限,因为大多数客户端都使用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标头完全由客户端控制,因此应视为不受信任的用户输入。