.NET中的HTTP基本授权



也许我遗漏了什么,或者.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标头完全由客户端控制,因此应被视为不受信任的用户输入。

相关内容

  • 没有找到相关文章

最新更新