Subscribed unsubscribe Subscribe Subscribe

OAuth認証+JavaからTwitterにポスト その2

Twitter OAuth

だいぶ間が空いたけどTwitterOAuth認証~request_token取得編~
今日はとりあえず仕様をじっくり見てみます。


http://oauth.net/core/1.0/
↑のページの6.1がrequest_token取得の部分です。

6.1. Obtaining an Unauthorized Request Token


The Consumer obtains an unauthorized Request Token by asking the Service Provider to issue a Token. The Request Token’s sole purpose is to receive User approval and can only be used to obtain an Access Token. The Request Token process goes as follows:


Consumerは未認証のRequest TokenをService Providerに発行してもらいます。
Request Tokenの目的は一つで、それはUserの承認を得ることで、Access Tokenを得るためだけに使用されます。
Request Tokenの取得の仕方は以下のとおり:

つまり、Request Tokenは使い捨てです。Access Tokenを取得したあとは不要になります。



6.1.1はRequest Tokenの取得手順
一番大事なとこ。

6.1.1. Consumer Obtains a Request Token


To obtain a Request Token, the Consumer sends an HTTP request to the Service Provider’s Request Token URL. The Service Provider documentation specifies the HTTP method for this request, and HTTP POST is RECOMMENDED. The request MUST be signed and contains the following parameters:


Request Tokenを取得するため、ConsumerはService ProviderのRequest Token URLにHTTPリクエストを送ります。
Service Providerの文書に、このリクエストのためのHTTPメソッドが定められています。POSTがRECOMMENDEDです。
リクエストは署名されていなければならず、以下のパラメータを含んでいます。

    oauth_consumer_key:
        The Consumer Key. 
    oauth_signature_method:
        The signature method the Consumer used to sign the request. 
    oauth_signature:
        The signature as defined in Signing Requests (Signing Requests). 
    oauth_timestamp:
        As defined in Nonce and Timestamp (Nonce and Timestamp). 
    oauth_nonce:
        As defined in Nonce and Timestamp (Nonce and Timestamp). 
    oauth_version:
        OPTIONAL. If present, value MUST be 1.0 . Service Providers MUST assume the protocol version to be 1.0 if this parameter is not present. Service Providers’ response to non-1.0 value is left undefined. 
    Additional parameters:
        Any additional parameters, as defined by the Service Provider. 


oauth_consumer_keyはConsumerに対し、Service Providerが発行するIDみたいなものです。
http://twitter.com/oauth_clients
ここで登録しちゃってください。
同時にoauth_consumer_secretも発行されます。これはパスワードみたいなもの。

oauth_timestampはいわゆるUNIXタイムスタンプ

oauth_nonceというのはランダムな文字列です。
なんでもいいですが、リクエストの度に変える必要があります。セキュリティのためです。

oauth_versionは1.0

oauth_signatureは署名です。これを作るのが結構面倒くさい。

oauth_signature_methodは署名の形式です。


で、6.1.1のとおり、Request Token URLにパラメータと署名をくっつけてリクエストを送ると、
oauth_tokenとoauth_token_secretがService Providerから発行されます。

6.1.2. Service Provider Issues an Unauthorized Request Token

The Service Provider verifies the signature and Consumer Key. If successful, it generates a Request Token and Token Secret and returns them to the Consumer in the HTTP response body as defined in (Service Provider Response Parameters). The Service Provider MUST ensure the Request Token cannot be exchanged for an Access Token until the User successfully grants access in (Obtaining User Authorization).


Service Providerは署名とConsumer Keyを確認します。うまくいけばRequest TokenとToken Secretを生成し、Consumerに(Service Provider Response Parameters)に定められているとおり、HTTPのレスポンスボディの中に入れてConsumerに返します。Service Providerは(Obtaining User Authorization)のとおり、ユーザによる承認が成功するまでRequest TokenとAccess Tokenを交換してはいけません。


The response contains the following parameters:

    oauth_token:
        The Request Token. 
    oauth_token_secret:
        The Token Secret. 
    Additional parameters:
        Any additional parameters, as defined by the Service Provider. 

If the request fails verification or is rejected for other reasons, the Service Provider SHOULD respond with the appropriate response code as defined in (HTTP Response Codes). The Service Provider MAY include some further details about why the request was rejected in the HTTP response body as defined in (Service Provider Response Parameters).


リクエストが不正だったり、なんらかの理由で拒絶された場合、Service Provider は(HTTP Response Codes)に定義されているとおり、適切なレスポンスコードを返すべきです。Service Providerはさらに詳細な接続断の理由を (Service Provider Response Parameters)のように含めるかもしれません。


まあつまり成功したらちゃんとRequest Token(oauth Token)がもらえて、
失敗したらエラーコード返ってくるよってことです。

次回はrequest parameter, signatureの作り方あたりをやりましょうかね。