4

フォームベースの認証を使用しているasp.netアプリケーションがあるという小さな難問があります。アプリケーションの内部には、User.IsInRole( "somerole")をチェックするWebサービスがあります。これは、ユーザーがログインしているため、アプリケーションからのajax呼び出しで正常に機能し、ajax呼び出しはログインしたブラウザーから送信されます。

ここで、ファットクライアントにWebサービス(初心者向けのc#コンソールクライアント)を呼び出させたいのですが、クレデンシャル情報を渡す方法がわかりません。

私は無駄に次のようなことをすることを検討しました:

SomeWebService svc = new SomeWebService();
svc.Credentials = new NetworkCredential("formsusername","formspassword","");
String returnValue = svc.CallMyWebMethod();

誰かが私にこれへのトリックを見せてもらえますか?:-)

ありがとう!

4

1 に答える 1

2

フォーム認証は、クライアントが各要求に沿って Cookie を送信することによって機能します。この Cookie は、クライアントが正しい資格情報を送信して認証に成功したときに、サーバーによって発行されます。

フォーム認証を使用してユーザーを認証するには、コンソール アプリケーションで次の手順を実行する必要があります。

  1. ユーザー名とパスワードを渡す HTTP POST 要求を Web ページに送信します。応答として、Web サーバーは、Set-Cookieキャプチャする必要がある認証 Cookie (HTTP 応答ヘッダー) を提供します。これは通常、ログ ページです。
  2. Web サービスを呼び出すときは、この Cookie ( CookieHTTP 要求ヘッダー) を渡す必要があります。リクエストとともに Cookie を設定するには、GetWebRequest生成されたクライアント プロキシ クラスのメソッドをオーバーライドする必要があります。

    protected override WebRequest GetWebRequest(Uri uri)
    {
        var request = (HttpWebRequest)base.GetWebRequest(uri);
    
        request.CookieContainer.Add(
            new Cookie(
                ".ASPXAUTH", 
                "THE VALUE YOU HAVE RETRIEVED WHEN YOU SEND YOUR FIRST LOGON REQUEST"
            )
        );
    
        return request;
    }
    
于 2012-06-20T07:41:22.820 に答える