次の方法で共有


Azure AD B2C を使用して Android アプリで認証オプションを構成する

重要

2025 年 5 月 1 日より、Azure AD B2C は新規のお客様向けに購入できなくなります。 詳細については、FAQ を参照してください

この記事では、Android アプリケーションの Azure Active Directory B2C (Azure AD B2C) 認証エクスペリエンスを有効、カスタマイズ、および強化する方法について説明します。

開始する前に、次の記事を理解しておいてください。

カスタム ドメインの使用

カスタム ドメインを使用すると、認証 URL を完全にブランド化できます。 ユーザーの観点からは、ユーザーは Azure AD B2C b2clogin.com ドメイン名にリダイレクトされるのではなく、認証プロセス中もドメインに残ります。

URL 内の "b2c" へのすべての参照を削除するには、認証要求 URL の B2C テナント名 (contoso.onmicrosoft.com) をテナント ID GUID に置き換えることもできます。 たとえば、 https://fabrikamb2c.b2clogin.com/contoso.onmicrosoft.com/https://account.contosobank.co.uk/<tenant ID GUID>/ に変更できます。

認証 URL でカスタム ドメインとテナント ID を使用するには、「 カスタム ドメインを有効にする」のガイダンスに従います。 Microsoft 認証ライブラリ (MSAL 構成オブジェクト) を探し、カスタム ドメイン名とテナント ID で 機関 を更新します。

次の Kotlin コードは、変更前の MSAL 構成オブジェクトを示しています。

val parameters = AcquireTokenParameters.Builder()
        .startAuthorizationFromActivity(activity)
        .fromAuthority("https://contoso.b2clogin.com/fabrikamb2c.contoso.com/B2C_1_susi")
        // More settings here
        .build()

b2cApp!!.acquireToken(parameters)

次の Kotlin コードは、変更後の MSAL 構成オブジェクトを示しています。

val parameters = AcquireTokenParameters.Builder()
        .startAuthorizationFromActivity(activity)
        .fromAuthority("https://custom.___domain.com/00000000-0000-0000-0000-000000000000/B2C_1_susi")
        // More settings here
        .build()

b2cApp!!.acquireToken(parameters)

サインイン名を事前に入力する

サインイン ユーザー体験中に、アプリが特定のユーザーをターゲットにしている可能性があります。 アプリがユーザーを対象とする場合は、承認要求で、ユーザーのサインイン名を使用して login_hint クエリ パラメーターを指定できます。 Azure AD B2C によってサインイン名が自動的に設定され、ユーザーはパスワードのみを指定する必要があります。

サインイン名を事前に入力するには、次の操作を行います。

  1. カスタム ポリシーを使用している場合は、「 直接サインインの設定」の説明に従って、必要な入力要求を追加します。
  2. MSAL 構成オブジェクトを探し、ログイン ヒントを使用して withLoginHint() メソッドを追加します。
val parameters = AcquireTokenParameters.Builder()
    .startAuthorizationFromActivity(activity)
    .withLoginHint("bob@contoso.com") 
    // More settings here
    .build()

b2cApp!!.acquireToken(parameters)

ID プロバイダーを事前選択する

Facebook、LinkedIn、Google などのソーシャル アカウントを含むようにアプリケーションのサインイン体験を構成した場合は、 domain_hint パラメーターを指定できます。 このクエリ パラメーターは、サインインに使用するソーシャル ID プロバイダーに関するヒントを Azure AD B2C に提供します。 たとえば、アプリケーションが domain_hint=facebook.comを指定した場合、サインイン フローは Facebook サインイン ページに直接移動します。

ユーザーを外部 ID プロバイダーにリダイレクトするには、次の操作を行います。

  1. 外部 ID プロバイダーのドメイン名を確認します。 詳細については、「サインインをソーシャル プロバイダーにリダイレクトする」を参照してください。
  2. 既存のリスト オブジェクトを作成または使用して、追加のクエリ パラメーターを格納します。
  3. 対応するドメイン名を持つ domain_hint パラメーターを一覧に追加します (例: facebook.com)。
  4. 追加のクエリ パラメーター リストを MSAL 構成オブジェクトの withAuthorizationQueryStringParameters メソッドに渡します。
val extraQueryParameters: MutableList<Pair<String, String>> = ArrayList()
extraQueryParameters.add(Pair("domain_hint", "facebook.com"))

val parameters = AcquireTokenParameters.Builder()
    .startAuthorizationFromActivity(activity)
    .withAuthorizationQueryStringParameters(extraQueryParameters) 
    // More settings here
    .build()

b2cApp!!.acquireToken(parameters)

UI 言語を指定する

Azure AD B2C での言語のカスタマイズにより、ユーザー フローは顧客のニーズに合わせてさまざまな言語に対応できます。 詳細については、「言語の カスタマイズ」を参照してください。

優先する言語を設定するには、次の操作を行います。

  1. 言語のカスタマイズを構成します
  2. 既存のリスト オブジェクトを作成または使用して、追加のクエリ パラメーターを格納します。
  3. 対応する言語コードを含む ui_locales パラメーターを一覧に追加します (例: en-us)。
  4. 追加のクエリ パラメーター リストを MSAL 構成オブジェクトの withAuthorizationQueryStringParameters メソッドに渡します。
val extraQueryParameters: MutableList<Map.Entry<String, String>> = ArrayList()

val mapEntry   = object : Map.Entry<String, String> {
      override val key: String = "ui_locales"
      override val value: String = "en-us"
    }   
    
extraQueryParameters.add(mapEntry )

val parameters = AcquireTokenParameters.Builder()
    .startAuthorizationFromActivity(activity)
    .withAuthorizationQueryStringParameters(extraQueryParameters) 
    // More settings here
    .build()

b2cApp!!.acquireToken(parameters)

カスタム クエリ文字列パラメーターを渡す

カスタム ポリシーでは、カスタム クエリ文字列パラメーターを渡すことができます。 適切なユース ケースの例として、 ページコンテンツを動的に変更する場合があります

カスタム クエリ文字列パラメーターを渡すには、次の操作を行います。

  1. ContentDefinitionParameters 要素を構成します
  2. 既存のリスト オブジェクトを作成または使用して、追加のクエリ パラメーターを格納します。
  3. campaignIdなどのカスタム クエリ文字列パラメーターを追加します。 パラメーター値 (たとえば、 germany-promotion) を設定します。
  4. 追加のクエリ パラメーター リストを MSAL 構成オブジェクトの withAuthorizationQueryStringParameters メソッドに渡します。
val extraQueryParameters: MutableList<Pair<String, String>> = ArrayList()
extraQueryParameters.add(Pair("campaignId", "germany-promotion"))

val parameters = AcquireTokenParameters.Builder()
    .startAuthorizationFromActivity(activity)
    .withAuthorizationQueryStringParameters(extraQueryParameters) 
    // More settings here
    .build()

b2cApp!!.acquireToken(parameters)

ID トークン ヒントを渡す

証明書利用者アプリケーションは、OAuth2 承認要求の一部として受信 JSON Web トークン (JWT) を送信できます。 受信トークンは、ユーザーまたは承認要求に関するヒントです。 Azure AD B2C はトークンを検証し、要求を抽出します。

認証要求に ID トークン ヒントを含めるには、次の操作を行います。

  1. カスタム ポリシーで、 ID トークン ヒント技術プロファイルを定義します。
  2. コードで ID トークンを生成または取得し、トークンを変数 ( idToken など) に設定します。
  3. 既存のリスト オブジェクトを作成または使用して、追加のクエリ パラメーターを格納します。
  4. ID トークンを格納する対応する変数を使用して、 id_token_hint パラメーターを追加します。
  5. 追加のクエリ パラメーター リストを MSAL 構成オブジェクトの withAuthorizationQueryStringParameters メソッドに渡します。
val extraQueryParameters: MutableList<Pair<String, String>> = ArrayList()
extraQueryParameters.add(Pair("id_token_hint", idToken))

val parameters = AcquireTokenParameters.Builder()
    .startAuthorizationFromActivity(activity)
    .withAuthorizationQueryStringParameters(extraQueryParameters) 
    // More settings here
    .build()

b2cApp!!.acquireToken(parameters)

埋め込み Web ビュー エクスペリエンス

対話型認証には Web ブラウザーが必要です。 既定では、MSAL ライブラリはシステム Web ビューを使用します。 サインイン時に、MSAL ライブラリによって、Azure AD B2C ユーザー インターフェイスを使用して Android システム Web ビューがポップアップ表示されます。

詳細については、 MSAL を使用した Android でのアプリ間 SSO の有効化に関する記事を参照 してください。

要件に応じて、埋め込み Web ビューを使用できます。 MSAL の埋め込み Web ビューとシステム Web ビューには、ビジュアルとシングル サインオンの動作の違いがあります。

システム Web ビュー エクスペリエンスと埋め込み Web ビュー エクスペリエンスの違いを示すスクリーンショット。

重要

プラットフォームの既定値 (通常はシステム ブラウザー) を使用することをお勧めします。 システム ブラウザーは、以前にログインしたユーザーを記憶する方が優れています。 Google などの一部の ID プロバイダーでは、埋め込みビュー エクスペリエンスがサポートされていません。

この動作を変更するには、 app/src/main/res/raw/auth_config_b2c.jsonファイルを 開きます。 次に、authorization_user_agent値を持つWEBVIEW属性を追加します。 次の例では、Web ビューの種類を埋め込みビューに変更する方法を示します。

{
  "authorization_user_agent": "WEBVIEW" 
}

次のステップ