次の方法で共有


Azure AD B2C を使用して WPF デスクトップ アプリで認証オプションを有効にする

重要

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

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

開始する前に、 Azure AD B2C を使用したサンプル WPF デスクトップ アプリでの認証の構成 に関する記事を理解しておいてください。

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

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

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

  1. カスタム ポリシーを使用している場合は、「 直接サインインの設定」の説明に従って、必要な入力要求を追加します。
  2. Microsoft Authentication Library (MSAL) 構成オブジェクトを探し、ログイン ヒントを使用して withLoginHint() メソッドを追加します。
authResult = await app.AcquireTokenInteractive(App.ApiScopes)
    .WithParentActivityOrWindow(new WindowInteropHelper(this).Handle)
    .WithLoginHint("bob@contoso.com")
    .ExecuteAsync();

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

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

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

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

authResult = await app.AcquireTokenInteractive(App.ApiScopes)
    .WithParentActivityOrWindow(new WindowInteropHelper(this).Handle)
    .WithExtraQueryParameters(extraQueryParameters)
    .ExecuteAsync();

UI 言語を指定する

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

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

  1. 言語のカスタマイズを構成します
  2. 既存の Dictionary オブジェクトを作成または使用して、追加のクエリ パラメーターを格納します。
  3. 対応する言語コードを持つ ui_locales パラメーターをディクショナリに追加します (例: en-us)。
  4. 追加のクエリ パラメーター オブジェクトを MSAL 構成オブジェクトの WithExtraQueryParameters メソッドに渡します。
Dictionary<string, string> extraQueryParameters = new Dictionary<string, string>();
extraQueryParameters.Add("ui_locales", "en-us");

authResult = await app.AcquireTokenInteractive(App.ApiScopes)
    .WithParentActivityOrWindow(new WindowInteropHelper(this).Handle)
    .WithExtraQueryParameters(extraQueryParameters)
    .ExecuteAsync();

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

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

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

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

authResult = await app.AcquireTokenInteractive(App.ApiScopes)
    .WithParentActivityOrWindow(new WindowInteropHelper(this).Handle)
    .WithExtraQueryParameters(extraQueryParameters)
    .ExecuteAsync();

ID トークン ヒントを渡す

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

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

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

authResult = await app.AcquireTokenInteractive(App.ApiScopes)
    .WithParentActivityOrWindow(new WindowInteropHelper(this).Handle)
    .WithExtraQueryParameters(extraQueryParameters)
    .ExecuteAsync();

ログの設定

MSAL ライブラリは、問題の診断に役立つログ メッセージを生成します。 アプリはログ記録を構成できます。 アプリでは、詳細レベルと、個人データと組織データをログに記録するかどうかをカスタムで制御することもできます。

MSAL ログ コールバックを作成し、ユーザーが認証に問題がある場合にログを送信する方法を提供することをお勧めします。 MSAL では、次のレベルのログの詳細が提供されます。

  • エラー: 問題が発生し、エラーが生成されました。 このレベルは、問題のデバッグと特定に使用されます。
  • 警告: 必ずしもエラーやエラーが発生したわけではありませんが、情報は診断と問題の特定を目的としています。
  • 情報: MSAL では、情報提供を目的としたイベントがログに記録され、必ずしもデバッグ用とは限りません。
  • 詳細: これが既定のレベルです。 MSAL は、ライブラリの動作の詳細をログに記録します。

既定では、MSAL ロガーは個人または組織のデータをキャプチャしません。 ライブラリには、個人データと組織データのログ記録を有効にするオプションがあります (これを行う場合)。

次のコード スニペットは、MSAL ログを構成する方法を示しています。

PublicClientApp = PublicClientApplicationBuilder.Create(ClientId)
    .WithB2CAuthority(AuthoritySignUpSignIn)
    .WithRedirectUri(RedirectUri)
    .WithLogging(Log, LogLevel.Info, false) // don't log P(ersonally) I(dentifiable) I(nformation) details on a regular basis
    .Build();

リダイレクト URI を構成する

デスクトップ アプリの登録プロセス中にリダイレクト URI を選択するときは、次の重要な考慮事項に注意してください。

  • 開発: デスクトップ アプリで開発を使用する場合は、リダイレクト URI を http://localhost に設定できます。Azure AD B2C は要求内の任意のポートを尊重します。 登録された URI にポートが含まれている場合、Azure AD B2C はそのポートのみを使用します。 たとえば、登録済みのリダイレクト URI が http://localhostされている場合、要求内のリダイレクト URI を http://localhost:<randomport>できます。 登録済みのリダイレクト URI が http://localhost:8080されている場合は、要求のリダイレクト URI を http://localhost:8080する必要があります。
  • 一意: リダイレクト URI のスキームは、すべてのアプリケーションで一意である必要があります。 この例の com.onmicrosoft.contosob2c.exampleapp://oauth/redirectでは、スキームは com.onmicrosoft.contosob2c.exampleapp です。 このパターンに従う必要があります。 2 つのアプリケーションが同じスキームを共有している場合、ユーザーにはアプリケーションの選択肢が与えられる。 ユーザーが誤って選択した場合、サインインは失敗します。
  • 完了: リダイレクト URI には、スキームとパスの両方が必要です。 パスには、ドメインの後に少なくとも 1 つのスラッシュ文字が含まれている必要があります。 たとえば、 //oauth/ は機能し、 //oauth は失敗します。 URI に特殊文字を含めないでください。 たとえば、アンダースコア文字 (_) は使用できません。

次のステップ