1

おそらく私は何かを見逃しているか、おそらく.NETは何かを見逃しています(できれば前者

アプリケーション(ASP.NETだけでなく、私の状況、特にASP.NETでホストされているWCF DS )を構築する場合、、または同様の要求/ヘッダーコンテナーNetworkCredentialからオブジェクトを作成するネイティブな方法はないようです。HttpRequest

私たちは常に自分自身を転がす必要がありますか、System.Net.*それともSystem.Web.*次のような署名に隠れている魔法がありますか?

NetworkCredential GetAuthorization(HttpRequest request);

私が知っているのは些細なことですが、HTTPアーキテクチャの標準的なものが、そうでなければ非常に包括的であるものに含まれると思います(.NET

それで、自作の文字列操作、またはどこかに隠れている魔法の方法?

4

1 に答える 1

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ヘッダーはクライアントによって完全に制御されるため、信頼できないユーザー入力として扱う必要があることに注意してください。

于 2013-02-12T19:30:35.197 に答える