[.NET]WebRequest+OAuthでハマった・・・

| トラックバック(0)

TwitterのOAuthが面白いので遊んでいた。

無計画にコードを書いていて、見にくくなったので、OAuthに準拠するようにコードを整形していた。

が・・・、整形前はちゃんと動いていたのに、認証が通らなくなった!!!

GETはいける。リクエストトークンやアクセストークンは取れる。なのに、POSTが通らない。

整形前のコードと見比べたり、デバッグで認証情報や送信データを吐き出してみてもダメ。

GETはいけるから、リクエスト署名の計算が間違っているわけでもない。


格闘する事数時間・・・。

仕方がないので、正しく動く整形前と、正しく動かない整形後のパケットを覗いてみた。

そしたら・・・


(  ゜ ▽ ゜ ;) HTTPヘッダにAuthorizationがない!??


OAuthに準拠する形で実装していたので、認証情報はURLクエリではなく、Authorizationヘッダに書き出していたのですが、なんとこれがごっそり漏れている・・・。そりゃ認証エラーで401が返されるわけですわ。

原因は、POSTデータをリクエストストリームに書き込むと、Authorizationヘッダが反映されなくなる、らしい。POSTデータを書き込む前にヘッダを設定すれば漏れることなく送信される。

 しかも厄介なことに、リクエストストリームを書き込んだ後に、Authorizationヘッダを設定して、プロパティで取得してみるとちゃんと取得できるという落とし穴付き。つまり・・・

"リクエストストリームを書き込んだ後に、Authorizationヘッダを設定すると、Authorizationヘッダが送信されない"、のですっ! 


(ノToT)ノ┫:・'.::・┻┻:・'.::・ こんなもん分かるかっ!!!


これって、仕様?バグ?

Authorizationヘッダはリクエストストリームを書く前に設定しろ、とかどこかに書いてあるのですか・・・???


ちなみに、よく見たらConnectionヘッダのKeep-Aliveも漏れてました。なんだろう・・・この挙動・・・。


とりあえず、リクエストヘッダは、リクエストストリームを書き込む前に設定しましょう・・・。


トラックバック(0)

トラックバックURL: /mt/mt-tb.cgi/59