お手上げドットコム

人生お手上げ気味なバフのぶろぐ。次の目標は300記事達成。

Twitter連携アプリのアプリケーションタイプと、それぞれを認可した場合に許可される操作について。


2017/07/22 追記:割と重要

いつからかは不明ですが、「追加のアクセス権」として登録メールアドレスへのアクセス権を設定可能となっているようです。

開発者側のアプリ管理画面に以下のような項目が追加されていました。

f:id:otapps:20170722054610p:plain

また、まだ試してはいませんが、ドキュメントにもinclude_emailオプションについて追加されていました。

f:id:otapps:20170722054951p:plain

「試していないのでドキュメントを読んだ限り」ですが、アプリケーション設定画面でAdditional Permissionsを有効にした場合、verify_credentialsメソッドでinclude_emailオプションを付加する事で認証ユーザの登録メールアドレスが取得出来てしまうようですね。(ドキュメント読む限りでは。)

とりあえず割と大事な事なので取り急ぎ追記しておきます。
アプリ連携によって、Twitterに登録しているメールアドレス(生きたメールアドレス)を取得されてしまうのは、色々面倒を呼ぶ事もあるかと思うので、メールアドレスの取得権限を要求するようなサービスを連携する場合は特に慎重になった方が良いかもしれません。

以下では、「アプリケーションタイプは3種類しか存在しない」という事を解説していますが、アプリ側の設定で「追加の権限」が設定されていれば「Twitterに登録済みのメールアドレスの取得も可能になっている」という事で。
なお、メールアドレスの取得権限が設定されている場合、その旨がアプリ連携時に表示されます。



TwitterのOAuthを利用した連携アプリを作成する場合に、アプリの作者は、Twitterのデベロッパー向けサイトでTwitterにアプリケーションを登録するのですが、そこで「アプリケーションタイプ」を選択します。
この「アプリケーションタイプ」によって、アプリケーションを認可したユーザのアカウントに対して可能な操作が変わってきます。
アプリケーションタイプは以下の3つの中から選択可能です。

  • Read only(読み込み専用)
  • Read and Write(読み込みと書き込み)
  • Read, Write and Access direct messages(読み込みと書き込み、更にダイレクトメッセージの操作)



f:id:otapps:20160303180851p:plain

上記の3つの中からアプリ作者は、アプリケーションタイプを選択する事が出来ます。
逆にアプリ作者が選択可能なアプリケーションタイプは3種類のみと言い換える事も可能です。

と、3種類のアプリケーションタイプの名称のみをあげた所で、連携アプリを実際に作成した事のある方でもなければイメージしづらいと思いますので、上記の3種類のアプリケーションタイプでそれぞれ可能な操作について以下に書きます。

それぞれのアプリケーションタイプで認可済ユーザのアカウントに対して可能な操作(あくまで一例)

Read only(読み込み専用)で可能な操作

ダイレクトメッセージへのアクセスを除く、TwitterAPIで可能な「読み込み系」の操作が全て利用可能です。
例えば…。

  • ユーザのタイムラインを取得(認可済ユーザがフォローしている非公開アカウントのツイートも含まれます)
  • ユーザのツイート一覧を取得
  • ユーザのプロフィールを取得
  • ユーザのフォロー一覧を取得
  • ユーザのフォロワー一覧を取得

その他諸々、Twitter側がAPIとして提供している読み込み系の操作が可能です。

Read and Write(読み込みと書き込み)で可能な操作

Read only で可能な操作全てに加え、TwitterAPIで可能な「書き込み系」の操作が可能です。(ダイレクトメッセージへのアクセスを除く)
例えば…。

  • ツイートの投稿
  • ツイートの削除
  • プロフィールの更新
  • 新しいフォローの追加
  • フォローの解除
  • 新しいブロックの追加
  • ブロックの解除
  • リストの作成

その他諸々、TwitterがAPIとして提供している、読み込み・書き込み系の操作が可能です。

Read, Write and Access direct messages(読み込み・書き込み・ダイレクトメッセージ)で可能な操作

Read and Write で可能な操作全てに加え、ダイレクトメッセージ関連の操作が可能です。

例えば…。

  • ダイレクトメッセージの送信
  • ダイレクトメッセージ一覧の取得
  • ダイレクトメッセージの削除

などなどです。

いずれのアプリケーションタイプでも不可能な操作

よく勘違いしている方がいらっしゃるようなので、一応、どのアプリケーションタイプを選択していてもアプリ側から不可能な事についても書いておきます。
大事な事なので二度言っておきますが、以下は「いずれのアプリケーションタイプでも"不可能な操作"」です。

  • アプリを認可したユーザのTwitterのパスワードをみる
  • アプリを認可したユーザのアカウントそのものを削除する

その他諸々。
これらは、Twitter連携アプリを正規の手段でOAuthで認可したからといって、認可したアプリからは不可能な操作の例です。(少なくとも2015/01/12現時点で)
誤解されそうなものを挙げてみました。
大事な事なので繰り返しますが「不可能な操作」です。(少なくとも「パスワードをみる」が可能になるとしたなら、OAuthでの認可である意味がないし。)

TwitterAPIで可能な操作についてもっと知りたい場合は…。

もっと知りたいって方は、開発者向けドキュメントを参照してください。

Documentation Home | Docs | Twitter Developer

各アプリケーションタイプの認可画面のサンプル

Twitterのアプリケーション認可画面で、「このアプリケーションでは次のような事ができます」と、例として挙げられている可能な操作が、非常にアバウトな感じに抽出されているので、ソレだけを見て、大騒ぎしていらっしゃる方をよく見かけます。
なので、それらの認可画面のサンプルも貼っておきます。

Read onlyなアプリケーションの認可画面のサンプル

f:id:otapps:20150112183549p:plain
うん。特筆する事無いですね。


Read and Writeなアプリケーションの認可画面のサンプル

f:id:otapps:20150112184017p:plain
上記の認可画面は、私が運営するウェブサービスの一つですが、「ブロック済アカウントの一覧表示」に加え「ブロック済アカウントの一括解除」機能を提供しているため、Write権限が必要となります。
が、上述している通り、「このアプリケーションでは次のような事が〜」ってところに、「プロフィールの更新」なんてのが並んでるせいか、それをみて「どうしてプロフィールの更新が必要なんだ!」とか騒いでいらっしゃる方を定期的にみかけます。
ですが、Read and Write 以上のアプリケーションタイプを選択している場合、その「許可される操作」として「プロフィールの更新」が含まれるのは、Twitterの仕様です。
別にそのアプリがプロフィールの更新を行うから、「許可される操作」として表示されているわけではなく、Read and Write 以上のアプリケーションタイプを選択しているアプリに対して許可される操作の一例として、上記のメッセージがテンプレとして表示されているだけです。
アプリがユーザのアカウントに対してどのようなリクエスト(操作)を行ったかを、ユーザが確認する術はありません。

Read, Write and Access direct messagesの認可画面のサンプル

f:id:otapps:20150112185834p:plain

Twitterのアプリケーション最大の権限を要求する Read, Write and Access direct messagesの画面ですが、ちゃんと

次のことはできません。

Twitterのパスワードを見る。

って書いてありますよね。
正規のTwitter連携であれば、アプリを認可したからといって、そのアプリの作者がTwitterのパスワードをみる事は出来ません


おまけで…。

Twitterのログインセッションが存在しない状態や、アプリ側で一旦Twitterログインセッションの破棄を行っている場合は、以下のようにパスワードを求められる事もあります。

f:id:otapps:20150112185541p:plain

それが正規のTwitterのOAuthの認可画面であるならば、ここでパスワードを入力してもTwitter側で認証しているだけで、そのアプリの作者にはパスワードは送信されません。
正規の画面であるか否かは、URLとか証明書で判断してください。

まとめ

TwitterのOAuthのアプリケーションタイプはそもそも3種類しか存在しません。
Twitterの認可画面で表示される「許可される操作」はわかりづらい「例」でしかなく、ざっくりとした形で権限が認可され、それらの操作が許可されるからといって、そのアプリにおいて、それらの操作が行われるとは限りません

そもそも、アプリケーションタイプが3種類しか無い故に、Read and Write以上のアプリケーションであれば、ユーザがアプリを認可の継続した状態*1、かつ、そのユーザのトークンをアプリ作者が保持している場合は、アプリ(またはその作者)からは認可済のユーザのアカウントに対して「認可された権限の範囲」で様々な操作が出来てしまいます。
ただ、「可能であること」と「実際にやるかどうか」ってのはまた別の話です。
実際、変な動きをしているTwitter連携アプリも多いですけど…。

そのアプリが「信用出来ない」、「リスクが大きい」と考えるのであれば、「利用しない事を選択する権利」はユーザにありますし、また、そのアプリの作者も妙な疑いを持たれてまでわざわざ無理して利用して欲しいなどとは思わないと思います。(少なくとも私はそう思います。)
つぅか、「利用しなければ命に関わる!」なんてTwitter連携アプリなんて存在しないと思いますし、そもそもTwitter自体…(略)だと思うので、根拠もなく、ソレについて検証する気もないのであれば、「危険だ!」なんだと大騒ぎして他人に迷惑をかける前に、とりあえず「黙って利用しない」とか「とりあえず認可を取り消す」という選択をした方が良いと思います。


ちなみに、Twitter連携解除方法についての記事も先日書きました。
解除したい連携アプリがある場合は、

をご確認下さい。

*1:認可後認可を取り消していない状態