identity

identity API を使って OAuth2 の認証コードやアクセストークンを取得し、拡張機能が OAuth2 での認証(Google や Facebook アカウントなど)をサポートするサービスからユーザーデータを取得できるようにします。

OAuth2 フローがどのように機能するかの詳細は、サービスプロバイダーごとに異なるため、特定のサービスプロバイダーにおいてこの API を使用するには、各サービスごとのドキュメントを参照する必要があります。例えば以下の通りです。

identity API は identity.launchWebAuthFlow() 関数を提供します。この関数は、必要に応じて、サービスのユーザー認証を行い、また、拡張機能にデータへのアクセスを認可するかどうかをユーザーに確認します。処理が完了すると、プロバイダーによって、アクセストークンか認可コードのどちらかが取得されます。

そして、OAuth2 フローを実施して取得した検証済みアクセストークンを、HTTP リクエスト内で使用することで、拡張機能はユーザーから認可された範囲でデータにアクセスできるようになります。

この API を利用するためには、"identity" API の権限が必要です。

セットアップ

拡張機能を公開する前に、いくつかの設定が必要です。

リダイレクト URL を取得する

リダイレクト URL は、アクセストークンまたは認証コードを拡張機能に配布するための identity.launchWebAuthFlow() のエンドポイントを意味します。ブラウザーはレスポンスを読み込まずに、リダイレクト URL から結果を展開します。

identity.getRedirectURL() を呼び出すことでリダイレクト URL をすることが取得できます。この関数は、アドオン ID からリダイレクト URL を生成するため、使用したい場合、browser_specific_settings キーを使用してアドオン ID を明示的に設定する必要があるでしょう(設定しない場合、アドオンを一時的にインストールするたびに、異なるリダイレクト URL を取得することになります)。

identity.getRedirectURL() は、修正されたドメイン名とアドオンの ID に由来するサブドメインで URL を返します。OAuth サーバー(Google など)によっては、所有者が確認されたドメインしかリダイレクト URL として受け入れられない場合があります。ダミードメインは拡張機能開発者がコントロールすることができないため、既定では常に使用することができません。

しかし、ループバックアドレスはドメイン検証を必要としない受け入れ可能な代替手段です(RFC 8252, section 7.3 に基づいています)。Firefox 86 からは、http://127.0.0.1/mozoauth2/[identity.getRedirectURL()] が返す URL のサブドメイン] という形式のループバックアドレスをリダイレクト URL の値として許可しています。

メモ: Firefox 75 からは identity.getRedirectURL() が返すリダイレクト URL を使用する必要があります。それ以前のバージョンでは、任意のリダイレクト URL を指定することができました。

Firefox 86 以降は、記述されている特殊なループバックアドレスも使用することができます。

リダイレクト URL は 2 つの場面で利用されます。

  • 拡張機能を OAuth2 クライアントとして登録するとき
  • identity.launchWebAuthFlow()url 引数に URL パラメーターとして渡すとき

拡張機能を登録する

サービスプロバイダー経由で OAuth2 を使用する前に、プロバイダーに対して、拡張機能を OAuth2 クライアントとして登録する必要があります。

サービスプロバイダーごとにやり方が異なることがありますが、一般的には、プロバイダーの ウェブサイトにおいて、拡張機能を登録することを意味します。この登録手順の中で、自身のリダイレクト URL を登録し、プロバイダーからクライアント ID (場合によっては、シークレットも) を受け取ります。そして、この両方を identity.launchWebAuthFlow() に渡す必要があります。

関数

identity.getRedirectURL()

リダイレクト URL を取得します。

identity.launchWebAuthFlow()

ウェブ認証フローを開始します。

ブラウザーの互換性

BCD tables only load in the browser

Example extensions

メモ: この API は Chromium の chrome.identity API に基づいています。