OAuth1.0の署名(Signature)をPythonで生成してみた
経緯
そもそもOAuthとは
以下のサイトによくまとまっている。
ゼロから学ぶOAuth【gihyo.jp】 OAuthとは何か【暇なメモ帳】
Signatureの生成方法
作成方法は以下を参考にした OAuth1.0の署名(Signature)を作成する方法
材料
キーの材料 * Consumer secret (client_secret) * Token secret (resource_owner_secret)
データの材料 * Request method * Request URL * Parameter
上のParameterは、リクエストヘッダに記載するAuthorizationパラメータのうちoauthで始まる値及びBodyに記載したデータのこと
たとえばはてなブログのリクエストトークンを取得するリクエストヘッダは以下のとおり
# HTTPS POST /oauth/initiate HTTP/1.1 Host: www.hatena.com Authorization: OAuth realm="", oauth_callback="oob", oauth_consumer_key="yTVGWKqa6OiH5A%3D%3D", oauth_nonce="0c670efea71547422662", oauth_signature="lvQC7AXTRIaqxbjwVGgPlYuNaaw%3D", oauth_signature_method="HMAC-SHA1", oauth_timestamp="1291689730",oauth_version="1.0" Content-Type: application/x-www-form-urlencoded Content-Length: 33 scope=read_public%2Cread_private
この場合以下の値を材料として用いる + oauth_callback="oob", + oauth_consumer_key="yTVGWKqa6OiH5A%3D%3D", + oauth_nonce="0c670efea71547422662", + oauth_signature="lvQC7AXTRIaqxbjwVGgPlYuNaaw%3D", + oauth_signature_method="HMAC-SHA1", + oauth_timestamp="1291689730" + oauth_version="1.0" + scope=read_public%2Cread_private
なおnonceは適当な文字列なのでなんでもよい。
以下はてなのOAuth認を題材にsignatureキーの生成をPythonで行うコード
なおPtynonにはrequestsという便利なライブラリがあるのでそれを使うのが一番早い