Twitter OAuth 対応の話

BASIC Auth deprecation私が作成した Twitter 通知用 WordPress プラグイン「Simple Tweet」ですが、Ver.1.3.0 から Twitter OAuth に対応しました。
また、先行してFMのオンエア曲を流すbotも OAuth 対応しました。
これは Twitter の BASIC認証が2010年6月に廃止予定との情報を受けての対応です。

2010年6月から Twitter API の BASIC 認証が deprecated になるとのこと。

Deprecated というのは「非推奨」「廃止予定」という意味で
これを見る限りでは6月に即廃止ということではないと思いたいんだけど
少なくとも正式にはサポートされないということなので
その後はいつ廃止されてもおかしくない。

Twitter APIのBASIC認証は2010年6月に「廃止予定」 – 頭ん中

さて、本題の OAuth のお話。
Twitter で OAuth を利用するには、おおまかに以下の流れを踏みます。

  1. http://twitter.com/oauth_clients で Twitter にアプリケーションを登録して、consumer_key, consumer_key_secret を取得。
  2. consumer_key, consumer_key_secret から、request_token, request_token_secret を生成。
  3. 取得した request_token から authorize URLを生成。
  4. twitter側で認証した後、callback_url に戻ってくるパラメータ oauth_verifier 若しくは PIN と、request_token, request_token_secret を利用して、access_token, access_token_secret を取得。
  5. consumer_key, consumer_key_secret, access_token, access_token_secret を利用して、Twitter の各種APIを使用する。

consumer_key, consumer_key_secret, access_token, access_token_secret 共に重要なキーです。
これらが漏れると、どんなことが可能になるでしょうか?

consumer_key, consumer_key_secret の役割を考えてみましょう。
これら2つのキーは Twitter アプリケーションの認証を行っていると考えていいでしょう。

TweetTwitter アプリケーション名が、どこに出てくるかというと例えば以下のような所です

  • Tweet のアプリケーション名
  • 認証画面のアプリケーション名

Twitter OAuthconsumer_key, consumer_key_secret が漏れると、これを偽装できちゃいます。
OAuth で認証する画面を見ると分かるんですけど Twitter アプリケーションの情報って名前とアプリケーションを登録したユーザ名しか出てないんですよね。
ユーザはこれだけの情報で、認証を求めてきたアプリケーションに対して権利を委ねなければなりません。

例えば「TweetPost」という Twitter アプリケーションが有ったとします。
このアプリケーションの consumer_key, consumer_key_secret が第三者に漏れてしまった場合、その第三者が consumer_key, consumer_key_secret を使用して「TweetPost」という名前の悪意あるアプリケーションを作成し、誰かにユーザー登録させることも可能です。いわゆる成りすましですね。
「TweetPost」というアプリケーションが、地道に築き上げてきた信頼・ブランドが瓦解しちゃいますね。

実際はアプリケーションのタイプを「Browser」にした場合は Twitter での認証後、アプリケーションに登録してある Callback URL に遷移するので oauth_verifier を取得するのは難儀ですが (^^;;
アプリケーションのタイプを「Client」にした場合は、request_token, request_token_secret, PIN から access_token, access_token_secret が生成できるので、成りすましは容易に可能になるでしょう。

Webアプリケーションだったら、consumer_key, consumer_key_secret を隠蔽するのは比較的容易ですが、クライアントアプリだと辛いモノがありますね。
クライアントアプリ用に OAuth 以外の認証方法が用意されるのかも知れません。

そんなわけで、Simple Tweet Ver.1.3.x では、Twitter アプリの登録は自分でやってもらうことにしました。
私が登録した Twitter アプリ経由で OAuth を通してもらうには、consumer_key, consumer_key_secret をどこかに入れ込んでおかないといけないですからね。

最近、見かけた WordPress プラグインの中にソース内に consumer_key, consumer_key_secret を埋め込んでいるものがありました。
そのプラグインは、現在のバージョンでは OAuth に対応していないようですが、将来の対応のために埋め込んであったのかも。
どの WordPress プラグインとは特定しませんが、この辺を深く考えないでソースの中に consumer_key, consumer_key_secret を埋め込んでいるようでは、作者のセキュリティに対する意識が薄いのかもしれません。
実害は無いとは思いますが、使用は控えたほうが良いかも知れません。

4 thoughts on “Twitter OAuth 対応の話

  1. オフマーク

    Simple Tweetの最新版(1.4.0.2)を使用したいのですが、ユーザープロフィールの「Twitter OAuth」のURLが「/wp-admin/%1$s」になってしまいま認証できません。

    他のサイト(レンサバも別)では、正常に使用できています。

    原因は何が考えられるでしょうか?

    PHP Version 5.2.8
    cURL support enabled
    cURL Information libcurl/7.12.1 OpenSSL/0.9.7a zlib/1.2.1.2 libidn/0.5.6

    上記、環境です。

    返信
  2. pirocot

    初めまして。Simple Tweet 1.3.8.2を導入しようとしています。
    OAuthの設定はうまくいき、

    【Twitter でツイートする言葉】 %POST_TITLE% – %PERMALINK% | %SITE_NAME%
    【Twitter でツイートする言葉にパーマリンクを含まない】のチェックは外す
    【パーマリンクを圧縮する】 のチェックは外す

    という設定をしたのですが、TwitterへのPOSTはうまくいくものの

    https://twitter.com/#!/pirocot/status/155373952682823680

    のようにパーマリンクの手前に無効なURLが挿入され(http://t.co/rTEJgGYF)、かつサイト名も表示されていないという現象に悩んでいます。
    何かお気づきの点はございますでしょうか?

    よろしくお願いします。

    返信
  3. とろや

    ユーザーごとにOAuthサーバーへのアプリケーション登録をすると、OAuthサーバーのデータベースにsimple tweet(の名前違い)の重複レコードがユーザーの数だけできてしまい、そちらの管理作業に迷惑がかかりませんか?
    私が作業したときには「simple tweet」「simple tweet2」はすでに使われており、同じアプリケーション名では登録できませんでした。

    ちなみに、exciteなどの他の似たようなtwitterアプリケーションはユニークな1件だけの登録のようです。
    ソースコードを公開していないのでそういう運用なのでしょうが・・・

    返信
  4. ピンバック: Twitterで間違えて登録したりいらなくなったOAuthアプリを削除したい(未解決) « ponnao-clip

コメントを残す

メールアドレスが公開されることはありません。

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください