piyolog

piyokangoの備忘録です。セキュリティの出来事を中心にまとめています。このサイトはGoogle Analyticsを利用しています。

Twitter連携アプリで出来ることを権限別に分けてみた。

Twitterの連携アプリを登録する際、設定できる権限には「読み込み権限」、「読み込み・書き込み権限」の二種類しか存在しないということを知りました。
では、それぞれの権限で利用可能なAPIはどういったものが存在するのか、他のBlogではDMが送られたり、勝手につぶやかれたりといった多少曖昧な記載に留まっているので、APIを眺めてみました。
 
そもそも読み込み、書き込みといった権限の考え方についてはTwitterの公式サイトでは次の通りFAQに記載されています。

The application registration page asks about read/write access. What constitutes a write?

                                      • -

Many users trust an application to read their information but not necessarily change their name or post new statuses. Updating information via the Twitter API - be it name, location or adding a new status - requires and HTTP POST. We stuck with the same restriction when implementing this. Any API method that requires an HTTP POST is considered a write method and requires read & write access.

OAuth FAQ
 
というわけで、GET以外のメソッドをサポートしているAPIはRead/Write権限が必要であると考え、こちらの日本語訳をコピペ参考にさせていただき、アクセス権限別のリストをまとめてみました。
Twitter API 仕様書 Twitter API 仕様書 日本語訳 第五十版 (2010年8月12日版) 日本語訳: tsupo
 

Read権限で実行可能なAPI(GETメソッドをサポートしているAPI)

TwitterAPI 概要
statuses/public_timeline 公開(かつ、自分のアイコンを設定済みの)ユーザの最新のステータス(発言)を取得する (最大20件)
statuses/home_timeline 自分と自分の friend の過去800件分のステータス(retweetを含む)から最大20件(count引数使用時は最大200件)を取得する。
statuses/friends_timeline 自分の friend の過去800件分のステータス(include_rts 引数使用時は自分の friend の retweet も含む)から最大20件(count引数使用時は最大200件)を取得する。
statuses/user_timeline 自分の過去3200件分のステータスから最大20件(count引数使用時は最大200件)を取得する。
statuses/replies 自分に対する返信(冒頭が @ユーザ名 で始まるステータス)の一覧を取得する (最大20件)
statuses/mentions 自分に対する言及(@ユーザ名 が含まれるステータス)の一覧を取得する (最大20件)
statuses/retweeted_by_me 自分が投稿した retweet の一覧を取得する (最大20件)
statuses/retweeted_to_me 自分の friends が投稿した retweet の一覧を取得する (最大20件)
statuses/retweets_of_me 自分が投稿した発言のうち(自分以外の)誰かによって retweet されたものの一覧を取得する (最大20件)
statuses/show 指定した ID のステータス(1件)を取得する
statuses/retweets 指定したステータスを retweet しているユーザの一覧のうち最初の100人分を取得する
statuses/id/retweeted_by 指定したステータスを retweet しているユーザのうち最大100人分のユーザ情報を取得する
statuses/id/retweeted_by/ids 指定したステータスを retweet しているユーザのうち最大100人分のユーザIDを取得する
statuses/friends 自分の friend の一覧を(各 friend の最新ステータス付きで)取得する
statuses/followers 自分の follower の一覧を(各 follower の最新ステータス付きで)取得する
users/show 指定ユーザに関する詳細な情報を取得する。
users/lookup ユーザIDまたはスクリーン名で指定したユーザに関する詳細な情報を取得する
users/search 指定条件に一致する Twitter ユーザを検索する。
users/suggestions Twitter の “suggested user list”のカテゴリ(分類)一覧を取得する
users/suggestions/category Twitter の “suggested user list”のうち、指定したカテゴリ(分類)の内容を取得する
direct_messages 自分宛てのダイレクトメッセージの一覧を取得する (最大20件)
direct_messages/sent 自分が送信したダイレクトメッセージの一覧を取得する (最大20件)
friendships/exists 指定した2ユーザの間の friend 関係を調べる
friendships/show 指定した2ユーザの間の関係を詳細に調べる
friendships/incoming (自分が protected なユーザである場合に、)自分にフォローリクエストを送っているユーザのうち、リクエストを保留中のユーザのID一覧(配列)を取得する
friendships/outgoing 自分がフォローリクエストを送っている(がまだ承認してもらえていない)protected なユーザのID一覧(配列)を取得する
friends/ids 自分の、あるいは指定したユーザが follow しているユーザ(friends)のID一覧(配列)を取得する
followers/ids 自分を、あるいは指定したユーザを follow しているユーザ(followers)のID一覧(配列)を取得する
account/verify_credentials (BASIC認証による)セッションを開始する。認証に成功すると HTTP 200 OK の応答とともに当該ユーザに関する情報(と cookie)が返る。
account/end_session verify_credentials で開始したセッションを終了する(本API実行後、空の cookie が返る)
account/rate_limit_status 自分の「API 制限状況」(この1時間以内にあと何回APIを実行できるか)を取得する。本APIの実行自体はAPI制限の対象外である(何回でも実行できる)
favorites 自分または指定したユーザの favorites(お気に入り) に登録されている「発言」のうち、最新のものから最大20件取得する
blocks/exists 指定したユーザをブロックしているかどうかを調べる。
blocks/blocking 自分がブロックしているユーザの一覧を取得する
blocks/blocking/ids 自分がブロックしているユーザのID一覧(配列)を取得する

 

Read&Write権限で実行可能なAPI(GETメソッドをサポートしていないAPI)

TwitterAPI 概要
statuses/update 自分のステータスを更新(update)する。引数 status は必須。
statuses/destroy ステータスを削除する。ステータスIDの指定は必須。
statuses/retweet 指定したステータスを retweet する。ステータスIDの指定は必須。
direct_messages/new ダイレクトメッセージを送信する。宛先と本文の指定は必須。
direct_messages/destroy ダイレクトメッセージを削除する。メッセージIDの指定は必須。
friendships/create 指定ユーザを自分の friend (following) にする
friendships/destroy 指定ユーザを自分の friend (following) から外す
account/update_delivery_device 自分の device を設定する
account/update_profile_colors Twitter 上の自分の profile ページの色を設定する
account/update_profile_image 自分の profile ページの画像(ユーザアイコンとしても使用される)を設定する
account/update_profile_background_image 自分の profile ページの背景画像を設定する
account/update_profile 自分の profile (アカウント情報) を変更する
favorites/create 指定ステータスを自分の「お気に入り」に登録する。
favorites/destroy 指定ステータスを自分の「お気に入り」から外す。
notifications/follow 指定ユーザ(following)の発言を「指定デバイス」に送信するようにする
notifications/leave 指定ユーザ(following)の発言を「指定デバイス」に送信するのをやめる
blocks/create 指定ユーザをブロックする。指定ユーザが friend だった場合、friend から外した上でブロックする
blocks/destroy 指定ユーザのブロックを解除する

 
これを見ると「読み込み権限」だけでも様々な情報の取得がすべて出来ることが分かります。たとえば、ダイレクトメールの内容やブロックしている相手などの情報も取得できます。このように様々なAPIが公開されている反面、それに伴う認可の細かい分類は全くない状態でもあるので、前回のエントリーでは漠然的に気を付けましょうなんて書いていましたが、改めて。連携アプリから要求が行われた際は上記内容が行われても問題ないという前提で許可をすることをお勧めいたします。