none
WebRequestクラスでAuthorizationヘッダに独自設定をしたい RRS feed

  • 質問

  • WebRequestクラスでAuthorizationヘッダに独自の設定をしたいのですが、どの様にすれば良いのでしょうか?

    ここにサンプルがあるとか、このページが参考になるといったものがあれば、教えてください。

    ダイジェスト認証であれば、Credentialsプロパティに「new NetworkCredential(ユーザ, パスワード)」を

    設定すれば良いだけなので、できれば同じ様にCredentialsプロパティを使って簡単にできれば良いと思っています。

    2010年3月31日 9:11

回答

すべての返信

  • この機構を使ってOAuth認証を実装しましたが、ちょっと問題があります。

    質問に対しては…

    IAuthenticationModule

    CredentialCache

    AuthenticationManager

    を使うことで実装できます。

    • 回答としてマーク 山本春海 2010年4月8日 7:44
    2010年3月31日 10:51
  • こんにちは、HiroXX さん。
    その後はいかがでしょうか。

    佐祐理 さん情報ありがとうございます。回答としてマークさせていただきました。
    もし、ほかの方もサンプルなどの情報があれば是非投稿お願いいたしますね。
    有効な情報には、ほかの人の目にとまりやすくなりますので、マークしてみてくださいね。
    それではまた^^

     

    2010年4月8日 7:48
  • ご回答いただき、ありがとうございました。

    サーバに接続し、パケットをキャプチャして確認したのですが、Authorizationが送信されていません。

    プログラムを簡略化して書くと以下の様になるのですが、良くない点があれば、ご指摘いただけると助かります。

    WebRequest request = WebRequest.Create(target);

    .....

    // カスタムの認証を登録
    CustomRsa customRsaModule = new CustomRsa("SIGN-TEST uri=.....");
    AuthenticationManager.Register(customRsaModule);

    // WebRequestのCredentialsにカスタムの認証を設定

    CredentialCache creCache = new CredentialCache();
    creCache.Add(new Uri("http://...../"), "SIGN-TEST", new NetworkCredential());
    request.Credentials = creCache;

    // レスポンス取得
    HttpWebResponse response = (HttpWebResponse)request.GetResponse();

    また、CustomRsaクラスは、IAuthenticationModuleを継承した形で、別途定義しています。

    なお、クライアントからサーバへの初回通信から、Authorization付きのPOSTを送信したいと思っています。

    2010年4月21日 13:50
  • 少し進展しましたので、報告します。

    Authorizationが送信されなかったのは、以下が理由と分かりました。

    ・クライアントからのリクエストに対して、サーバから401が返って来ていたが、これに「WWW-Authenticate」が付いていなかったため、AuthenticalManagerが動かず、認証プロセスが実行されなかった。

    なお、クライアントからサーバへの初回通信から、Authorization付きのPOSTを送信するのは、.Netのクラスでは出来そうにないので、あきらめました。

    2010年4月22日 6:03
  • 問題のうちの1つですね。

    初回からAuthorizationを付けるのはセキュリティ上好ましくない状態です。(相手が誰なのかわからない状態で、秘密情報を能動的に送信すること)
    ですので、WebRequestは、既知の相手に対してのみ、Authorizationを送信します。これはCanPreAuthenticate=trueであってもです。

    またサーバからのレスポンスヘッダにWWW-Authenticateがない場合、AuthenticalManagerが動かず、は書かれている通りです。
    WWW-Authenticateがあれば、書かれているコードのようにCredentialCacheに特定のCredentialを渡すことで強制的に動作させることができます。

    この辺りはたぶん仕様なので、リクエストヘッダに直接書き込むしかないでしょう。

    2010年4月23日 14:09
  • いろいろアドバイスいただきありがとうございました。

    その後、AuthenticalManagerが正常に動作し、Authorizationが問題なく送信され、解決いたしました。

    2010年4月26日 0:57