メインコンテンツへスキップ
ネイティブアプリケーションに機能を追加して、ユーザーがアプリ内で Facebook を使ってネイティブに認証できるようにできます。これにより、Web ブラウザーを介したリダイレクトは不要になり、モバイルアプリケーションを Facebook Developer Policy に準拠させることができます。このポリシーでは、モバイルアプリケーションが認証に Android または iOS 向けの Facebook SDK を使用することを求めています。
Facebook SDK と統合すると、アプリケーションは Facebook とデータを共有することになります。共有されるデータの内容を十分に把握し、その内容がアプリケーションのプライバシーポリシーに適切に反映されていることを確認してください。SDK を介して Facebook と共有されるデータについて、Auth0 は一切制御できません。Facebook SDK および Facebook Login によって収集されるデータの詳細については、Facebook GDPR のページを参照してください。

仕組み

ネイティブ Facebook ログインフローは、次のように進みます。
  • Step 1: アプリケーションは Facebook SDK を介してユーザーを認証し、を取得します。
  • Step 2: アプリケーションはそのアクセストークンを使用して、特別な Facebook Session Info Access Token をリクエストします。
  • Step 3: Facebook SDK を使用してユーザーのプロフィールを取得します。
  • Step 4: その後、アプリケーションは Facebook Session Info トークンを使用して Auth0 に認証できます。

前提条件

Auth0 を介してネイティブアプリ向けの ネイティブ Facebook ログイン を設定する前に、次の作業が必要です。
  1. Facebook を Auth0 の接続として設定する
  2. アプリケーションで適切な Facebook SDK を使用する
  3. Auth0 Dashboard > Applications > Applications に移動し、Auth0 でアプリケーションを作成します (まだ作成していない場合) 。
  4. 設定ページの下部にある Show Advanced Settings を選択し、次に Device Settings ビューを選択します。Native Social Login で、Enable Sign In with Facebook トグルを有効にします。
    Native Social Login 設定

実装

Native Facebook ログインを使用してユーザープロファイルを認証するには、アプリケーション側で 4 つのステップを実行します。

ステップ 1

アプリケーションは Facebook SDK を使用してユーザーを認証します。認証後、Facebook からアクセストークンを取得します。

ステップ 2

アプリケーションは、アクセストークンを使用して Facebook Session Info Access Token をリクエストします。 このリクエストは、次のようになります。
GET https://graph.facebook.com/v5.0/oauth/access_token?grant_type=fb_attenuate_token&client_id=457704041391802&fb_exchange_token=<facebook_access_token>
およびレスポンス:
{
    "access_token": "XAAGgR4b...1lHWNCpqrAhcpoAZDZD",
    "token_type": "bearer",
    "expires_in": 5183924
}

ステップ 3

アプリケーションでは、Facebook SDK を使用して Facebook からユーザープロファイルを取得する必要があります。その結果、次のようなリクエストが送信されます。
GET https://graph.facebook.com/v5.0/<facebook user id>?access_token=<facebook access token>&fields=email,name

ステップ 4

その後、アプリケーションは、Token Exchange フローで facebook-session-access-token トークンタイプを使用して Auth0 の /oauth/token エンドポイントを呼び出し、セッション情報のアクセストークンと Facebook のユーザープロファイルを使って Auth0 で認証できます。問題なく処理されると、Auth0 は通常のトークン交換レスポンスにユーザープロファイルを追加して返します。ユーザープロファイルは、文字列としてエンコードされた JSON オブジェクトである必要があります。 および、Auth0 からのレスポンス:
{
    "access_token": "eyJ0eXA..yXQaPLVXg",
    "id_token": "eyJ0.tFE5HPipdOsA",
    "scope": "openid profile email read:appointments",
    "expires_in": 86400,
    "token_type": "Bearer"
}

ユーザープロファイルとメールアドレスの検証

前の例では、Facebook からユーザープロファイルを取得し、それを /oauth/token の呼び出しに含める必要がありました。これは、Facebook Session アクセストークン ではプロファイルを直接取得できず、また Apple’s AppStore Review Guidelines により、Facebook アクセストークン をサーバーに直接送信することもできないためです。したがって、クライアント側で取得し、この方法で Auth0 に送信する必要があります。 Auth0 は、ユーザープロファイルが Facebook から返されたものと同一であることを保証できないため、email_verified フィールドを false に設定します。

ログアウト

ネイティブログインの実装では標準的なブラウザベースのフローを使用しないため、アプリケーションの管理者はログアウトも適切に処理する必要があります。アプリケーションでログアウトが必要な場合は、Auth0 のリフレッシュトークンを取り消すことも必要です。

引き続きお読みください