この記事は Michael Winser、 Google Apps プロダクト リード、Wesley Chun、Google Apps デベロッパー アドボケートによる Google Apps Developer Blog の記事 "Google Apps Developer Blog: Increased account security via OAuth 2.0 token revocation" を元に翻訳・加筆したものです。詳しくは元記事をご覧ください。
先週(*原文公開当時)、OAuth 2.0 から Google のユーザーデータにアクセスする際の想定事項と責任を明確化しました。本日は、ユーザーの保護を強化するため、エンタープライズ Gmail ユーザーのアカウント セキュリティを強化することをお知らせいたします。これは、
2016 年 10 月 5 日から有効になります。現在、新しいポリシーが反映される予定になっていますが、Google Apps ドメインのユーザーが
この日以降にパスワードを変更すると、Gmail ベースの認証スコープを使ってメールボックスにアクセスするアプリの OAuth 2.0 トークンが取り消されることになります。
ユーザーはこの日に変更が行われることを意識する必要はなく、
アプリケーションは動作を続けます。これ以降にユーザーがパスワードを変更した場合のみ、Gmail 関連のトークンが無効になります。
デベロッパーは、トークンが取り消されたことによる HTTP 400 または 401 エラーコードを処理するようにアプリケーションを変更し、その際、アプリが再びメールボックスにアクセスできるよう、ユーザーが再度 OAuth フローを実行してアプリを再認証することをうながす必要があります(詳細は後述)。昨年後半にも、幅広い認証スコープに影響する同じようなセキュリティ ポリシーの変更計画について
お知らせしました。その後、Apps ユーザーに対してはこの変更を行わないことを
決定し、上記のような影響が少ないアップデートについて作業を進めてきました。
取り消されたトークンとは
取り消された OAuth 2.0 トークンでは、ユーザーのリソースにはアクセスできません。API 呼び出しで取り消されたトークンを使うとエラーになります。既存のトークン文字列に値はなくなり、破棄されます。Google API にアクセスするアプリケーションは、API 呼び出しの失敗に対応するように変更する必要があります。
トークンの取り消し自体は、新しい機能ではありません。今までも、ユーザーはアプリケーションへのアクセスを
アカウント情報から取り消すことができました。また、Google Apps 管理者も管理コンソールから同じことを行うことができます。さらに、長期間使われなかったトークンも、期限切れや取り消しの対象になっています。今回のセキュリティ ポリシーの変更によって、この処理が自動的に行われるようになるため、アプリケーションが取り消されたトークンを目にする比率が高まることが考えられます。
影響を受ける API とスコープ
できるだけ管理者を困らせたりエンドユーザーを混乱させたりせずに、今回のポリシー変更によるセキュリティ的なメリットを実現するため、変更の適用範囲を
メールスコープのみに限定し、
Apps スクリプト トークンは
除外することにしました。
Google Apps Marketplace からインストールしたアプリも、トークンの取り消しの対象にはなりません。この変更が行われると、Apple Mail や Thunderbird などのサードパーティのメールアプリや、少なくとも 1 つのメールスコープを含む複数のスコープを使用するアプリケーションは、パスワードの再設定を行ってから新しい OAuth 2.0 トークンが付与されるまで、データにアクセスできなくなります。
アプリケーションでは、このシナリオを検知し、アプリケーションからアカウント データにアクセスできなくなったことをユーザーに通知し、ユーザーに再度 OAuth 2.0 フローを行ってもらう必要があります。
モバイル メールアプリもこのポリシー変更に含まれます。たとえば、iOS のネイティブ メールアプリのユーザーは、パスワードを変更した際に Google アカウントの認証情報を使って再認証する必要があります。モバイルでのサードパーティ メールアプリの新しい動作は、iOS と Android の Gmail アプリの現在の動作と一致しています。Gmail アプリも、パスワードの再設定時に再認証が必要になります。
取り消されたトークンの判定方法
ユーザーがパスワードを変更すると、一時的なアクセス トークンと長期間のリフレッシュ トークンの両方が取り消されます。API アクセスに取り消されたトークンを使ったり、新しいアクセス トークンを生成したりすると、HTTP 400 または 401 エラーが発生します。アプリケーションで API にアクセスしたり OAuth フローを処理するライブラリを使用している場合、エラーが例外としてスローされる可能性もあります。例外をキャッチする方法については、ライブラリのドキュメントをご確認ください。注: HTTP 400 エラーはさまざまな理由で発生する可能性があります。取り消されたトークンが原因で発生する 400 エラーのペイロードは次のようになります。
{
"error_description": "Token has been revoked.",
"error": "invalid_grant"
}
アプリケーションでの取り消されたトークンの扱い方
この変更に関する重要な点は、トークンの取り消しはエラー シナリオではなく、通常の状態を想定すべきであるということです。アプリケーションでは、この状態を予期して検知し、トークンの復元に最適な UI を提供する必要があります。
アプリケーションが正常に動作するよう、以下を行うことを推奨いたします。
- 取り消されたトークンを検知する可能性がある API 呼び出しやトークンのリフレッシュ処理の周辺にエラー処理コードを追加します。
- 取り消されたトークンを検知した際は、ユーザーがアプリケーションを再認証するまで、Google API アクセスを利用するすべてのアプリケーション機能を無効化します。たとえば、影響を受ける可能性がある Google API とデータを同期するバックグラウンド ジョブの実行を停止します。
- アクセスが取り消されたユーザーに通知し、リソースへのアクセスを再認証してもらうよう要求します。
- アプリが 直接 ユーザーとインタラクションする場合は、ユーザーに再認証を要求する必要があります(ユーザーに電子メールを送信、次回アプリケーションを開いた際にアラートを表示)。
- ただし、アプリがユーザーから 独立 して実行されている場合、たとえば Gmail API を利用するバックグラウンド アプリの場合は、電子メールやその他の仕組みを利用してユーザーに通知する必要があります。
- 再認証のアクセス用に効率的な UI を提供し、ユーザーがアプリケーションで元の設定を探し回ることがないようにします。
- トークンが取り消されると、どのように取り消されたのかにはよらず、同じエラー メッセージになります。パスワード変更によってトークンが取り消されたことを前提としたメッセージにはしないでください。
アプリケーションで同じトークンに複数のスコープを一括して
段階的に認証している場合、ユーザーが有効にしている機能やスコープをトラッキングする必要があります。最終的に、アプリが複数のスコープの認証をリクエストして取得しており、少なくともその 1 つがトークンの取り消されたメールスコープである場合、もともと付与されている
すべての スコープを再認証するようユーザーに要求する必要があります。
多くのアプリケーションで、トークンを利用したバックグラウンドまたはサーバー対サーバーの API 呼び出しが行われています。ユーザーは、バックグラウンド動作が確実に継続することを期待しています。今回のポリシー変更は、
そのような アプリにも影響するため、即座に再認証のリクエストを通知することがさらに重要になります。
今回の変更のタイムライン
まとめると、適切に設定されたアプリケーションには、期限切れ、存在なし、取り消しなどによる無効なトークンを通常の状態と同様に汎用的に処理することが求められます。ユーザーにできる限り最高の体験をしていただけるよう、デベロッパーの皆様には必要な変更を行うことをお勧めします。ポリシーの変更は、
2016 年 10 月 5 日に実施される予定です。
詳細および
メールスコープの完全なリストについては、
ヘルプセンターのよくある質問の記事をご覧ください。今後、このポリシーに他のスコープが追加される際には、事前にお知らせいたします。詳細は、わかり次第お伝えします。
Posted by
Eiji Kitamura - Developer Relations Team