2009-07-18 9 views
9

ここでは、HttpListenerに問題があります。フォームHttpListener:httpユーザーとパスワードを取得する方法は?

http://user:[email protected]/ 

の要求が行われる

、どのように私は、ユーザーとパスワードを取得することができますか? HttpWebRequestにはCredentialsプロパティがありますが、HttpListenerRequestにはこのプロパティがありません。そのプロパティでユーザー名が見つかりませんでした。

ありがとうございました。

答えて

21

HTTP基本認証を使って資格を渡すことですが、HttpListenerでusername:password構文がサポートされているかどうかわかりませんが、そうであればbasicを受け入れるように指定する必要があります最初に認証します。

HttpListener listener = new HttpListener(); 
listener.Prefixes.Add(uriPrefix); 
listener.AuthenticationSchemes = AuthenticationSchemes.Basic; 
listener.Start(); 

あなたが要求を受信したら、その後でユーザー名とパスワードを抽出することができます。HttpListenerを一緒に使用することができ、サポートされているすべてのauthenitcation方法の

HttpListenerBasicIdentity identity = (HttpListenerBasicIdentity)context.User.Identity; 
Console.WriteLine(identity.Name); 
Console.WriteLine(identity.Password); 

Here's a full explanationを。

+0

申し訳ありませんが、「私は、ユーザー名いる場合じゃありません。パスワード構文はHttpListenerでサポートされていますが、もちろんこれを "WWW-Authenticate:basic"ヘッダに変換するクライアントだから、クライアントがサポートしている場合にのみ重要です。私はそれがIEから最近削除されたと信じています。 –

4

ヘッダーを入手してください。Authorization

Authorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ== 

ユーザ名とパスワードは、コロン区切り(この例では、Aladdin:open sesame)、次いで、B64-コードされる。これは

Authorization: <Type> <Base64-encoded-Username/Password-Pair> 

例は次のようにフォーマットされます。

2

あなたが最初に基本認証を有効にする必要があります

listener.AuthenticationSchemes = AuthenticationSchemes.Basic; 

その後、あなたのprocessRequestメソッドにユーザー名とパスワードを取得できます、私は言った

if (context.User.Identity.IsAuthenticated) 
{ 
    var identity = (HttpListenerBasicIdentity)context.User.Identity; 
    Console.WriteLine(identity.Name); 
    Console.WriteLine(identity.Password); 
} 
関連する問題