kgrss's blog

プログラムを中心にいろいろなことを記事にしていきます!

昨日のお話続き。(OAuth認証のSignature生成に関して)

どーもー、こがらしです。

TGSへ向かうさなかに書いてます笑

昨日はQueryParametersをkey=value&key=value...でつないでいくところまで書いたかなと思います。
そしたら、そろそろBaseStringを生成していきます!

必要なものとして、三つ必要になります。
1.リクエストメソッド文字列( "GET", "POST", ... )
2.リクエストURL( http://kgrss.hateblo.jp/postとか )
3.リクエストパラメータ( 今準備した、QueryParametersですねー )

まず、2と3についてはエスケープしましょう!これ絶対。

そしたらそれぞれを1,2,3の順番で & で結合します
GET&http://kgrss.hateblo.jp/post&message=hoge&title=var&oauth_.....
こんな感じです。
けど、URLとかQueryParametersとかはしっかりエスケープしてあると思ってください!
エスケープしたのを持ってくるのがかったるいのです。

あっ、一応OAuth系のパラメータをさらっと書いておきます。

oauth_consumer : サービスプロバイダー(Twitter等)からもらったConsumer key
oauth_token : Twitter等で、何かの処理をするための許可申請時にもらえるAccess Token(もらってなくてもパラメータに含める必要がある!重要)
oauth_nonce : リクエストごとに一意になるような適当な値(本当に何でもいい)
oauth_time : 現在の時間(UNIX_TIMESTAMPでだったかな)
oauth_version : これは常に"1.0"で。
oauth_signature_method : だいたいのプロバイダーでこれも固定で"HMAC-SHA1"

今あげた上の6つが、QueryParametersに追加で含まれます!
(さらにsignatureを生成したら、それも含めます)

そしたら、今度はハッシュ生成に使うキーです。
これは簡単ですよ。
Consumer SecretとAccess Secretを & で結合するだけ。

xxxxxxxx&yyyyyyyyyって感じです。
ちなみに、Access Secretが無い場合は、
xxxxxxxx&です。
なんとも寂しいです。

後はハッシュを生成して終わりといった感じですかね。
クライアント側(C#)を実装したときにはまったのが、byte配列にするときにエンコード指定をASCIIとUTF-8で色々迷ったところ・・・
BaseStringはUTF-8で、生成に使うキーの部分はASCIIでバイトコードにしてます。
そして、生成したままのハッシュだと形式が全然違うのでBase64エンコードURIエスケープが必要です。

そうして生成したsignatureをoauth_signatureとしてパラメータに付与すれば大丈夫といった感じのはず・・・!

あと、絶対Authorizationヘッダに足さないといけないとかではなかったと記憶していますよ。
まぁだいたいこんな感じです。
間違っている箇所があればご指摘くださいー。

ではではー。