仕組み
この機能は Android の Credential Manager を使用して、Auth0 で保護された Android アプリケーションでの Sign In with Google を容易にします。以下の手順は、Sign In with Google における一般的なユーザーのワークフローを示しています。
- ユーザーが Android アプリケーションを開き、Google でのログインを選択します。
- Android アプリケーションは Credential Manager を使用して、Sign In with Google をリクエストします。
- アカウント選択の画面で、ユーザーは使用する Google アカウントを選択します。
- Google はユーザーをローカルでサインインさせ、認証をすべて処理します。
- ユーザーは追加の操作を行うことなくサインインを完了します。
- Google は
id_tokenを Android アプリケーションに返します。 - Android アプリケーションは、検証のために
id_tokenを Auth0 テナントに送信します。Auth0 は、id_tokenのclient_idが、テナントで設定された Google のソーシャル接続のclient_idと一致することを検証します。 - Auth0 サーバーは
access_tokenを Android アプリケーションに返します。
始める前に
Sign In with Google の設定を開始する前に、次の条件を満たしていることを確認してください。- Auth0 テナント内で Google ソーシャル接続 が設定されていること。
- Purpose 設定では、認証、Token Vault の接続済みアカウント、またはその両方に対して接続を有効にします。詳しくは、ユーザー認証と接続済みアカウント をご覧ください。
- Android の Credential Manager を使用して、Android アプリケーションに Sign In with Google が追加されていること。
Android アプリケーション向けの Sign In with Google の設定
Sign In with Google を実装するには、主に 3 つの手順があります。- Google Cloud Console で資格情報を作成します。
- Auth0 でアプリケーションの詳細を設定します。
- Android アプリケーションのコードを更新します。
Google Cloud Console で資格情報を作成する
まず、Google Cloud Console で次の項目を設定する必要があります。-
種類を
Androidに設定した OAuth 2.0 資格情報を作成します。これをclient_id_nativeと呼びます。 -
手順 1 の Android Client に、ネイティブ アプリケーションの SHA1 ハッシュを追加します。
- 現在、Google がサポートしているのは SHA1 のみです。
-
Web 用の OAuth クライアント (
client_id_web) を追加で作成します。- 状況によっては、Web ベースの Sign in with Google をサポートする Social 接続用に、この項目がすでに設定済みの場合があります。
Google Credential Manager で Android の
client_id を使用すると、エラーが発生するため使用できません。Google から返される ID トークンでは、authorized party (azp) は自動的に Android OAuth Client ID に設定され、audience (aud) は Web OAuth Client ID に設定されます。Android から Credentials Manager を呼び出す場合、ネイティブ アプリケーションでは Credentials Manager SDK の .setServerClientId を使用して client_id_web を指定する必要があります。client_id_web は Google Cloud Console の Web Application OAuth 2 Credential に対応しており、Google OAuth2 の Social 接続で設定されます。詳しくは、Google のドキュメントを参照してください。Auth0 を設定する
Sign in with Google のフローでは、Auth0 と Android アプリケーションの間で行われるトークン交換を利用します。 Google Cloud Console で資格情報を作成したら、Android 向け Credential Manager を使用して Sign in with Google を有効にできます。これを行うには、またはのいずれかでアプリケーションを更新します。- Auth0 Dashboard
- Management API
Auth0 Dashboard からアプリケーションを更新するには、次の手順に従います。
- Applications > Applications に移動し、対象のネイティブ Android アプリケーションを選択します。
- Settings タブで、Advanced Settings セクションを展開します。
- Device Settings タブを選択し、Enable Sign in with Google (Android 4.4+) using Credentials Manager 設定を有効化します。
- 新しいアプリケーションの場合: Device Settings タブで、App Package Name を含む Android セクションの各項目を入力します。詳細については、Enable Android App Links Support を参照してください。
- Save Changes を選択します。
Androidアプリケーションのコードを更新する
次の例は、Microsoft、ユーザー名とパスワード、またはエンタープライズ フェデレーションなど、Google 以外の認証で使用される Web フローを補完するものです。googleCredential を取得するには、ネイティブアプリケーションのコードから Google ライブラリを呼び出す必要があります。詳しくは、Google の Credential Manager ドキュメントを参照してください。
追加の認証シナリオ
現在の Google 実装では、エンタープライズ フェデレーションや追加の (MFA) チャレンジに関する明確なガイダンスは提供されていませんが、Web エクスペリエンスに移行することで、これらの機能に対応できます。エンタープライズ フェデレーション
Auth0 はエンタープライズ フェデレーションをサポートしており、外部のエンタープライズ アイデンティティプロバイダー (Okta Workforce、ADFS、その他の OIDC 互換システムなど) を Auth0 テナントに接続できます。これにより、ユーザーは既存の社内資格情報を使って認証できるようになります。 エンタープライズ フェデレーションを利用する必要がある場合は、前述の例のようにid_token に依存するのではなく、ユーザーを Web ベースのフローにリダイレクトすることをおすすめします。
そのためには、Google の をデコードし、 に含まれる email を login_hint として渡します。これにより、エンドユーザーは Web フローでメールアドレスを再入力せずに済みます。
トークン交換時のMFAに関する考慮事項
Google OAuth 接続のポリシーで多要素認証が必要な場合、Auth0 はトークン交換中にアプリケーションへエラーを返します。 このエラーは、アプリケーションへのレスポンスに含まれます。 上記のエラーが発生した場合、アプリケーションは Google のid_token で利用可能な追加コンテキストを使って WebAuth を利用できます。このシナリオでは、エンドユーザーに表示されるのは MFA 画面のみです。