次の方法で共有


Azure AD B2C を使用してサンプル WPF デスクトップ アプリで認証を構成する

重要

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

この記事では、 Windows Presentation Foundation (WPF) デスクトップ アプリケーションのサンプルを使用して、Azure Active Directory B2C (Azure AD B2C) 認証をデスクトップ アプリに追加する方法を説明します。

概要

OpenID Connect (OIDC) は、OAuth 2.0 を基盤にした認証プロトコルです。 OIDC を使用して、ユーザーをアプリケーションに安全にサインインさせることができます。 このデスクトップ アプリ サンプルでは、OIDC 承認コード Proof Key for Code Exchange (PKCE) フローで Microsoft 認証ライブラリ (MSAL ) を使用します。 MSAL は、デスクトップ アプリへの認証と承認のサポートの追加を簡略化する Microsoft が提供するライブラリです。

サインイン フローには、次の手順が含まれます。

  1. ユーザーはアプリを開き、サインインを選択 します
  2. アプリは、デスクトップ デバイスのシステム ブラウザーを開き、Azure AD B2C への認証要求を開始します。
  3. ユーザーは 、サインアップまたはサインインパスワードのリセットソーシャル アカウントでのサインインを行います。
  4. ユーザーが正常にサインインすると、Azure AD B2C は承認コードをアプリに返します。
  5. アプリは次のアクションを実行します。
    1. 認証コードを ID トークン、アクセス トークン、および更新トークンと交換します。
    2. ID トークンのクレームを読み取ります。
    3. 後で使用するために、トークンがメモリ内キャッシュに格納されます。

アプリ登録の概要

アプリが Azure AD B2C でサインインして Web API を呼び出せるようにするには、Azure AD B2C ディレクトリに 2 つのアプリケーションを登録します。

  • デスクトップ アプリケーションの登録により、アプリは Azure AD B2C でサインインできます。 アプリの登録時に、 リダイレクト URI を指定します。 リダイレクト URI は、ユーザーが Azure AD B2C で認証された後に Azure AD B2C によってリダイレクトされるエンドポイントです。 アプリ登録プロセスでは、デスクトップ アプリを一意に識別する アプリケーション ID ( クライアント ID とも呼ばれます) が生成されます (たとえば、 アプリ ID: 1)。

  • Web API 登録を使用すると、アプリは保護された Web API を呼び出します。 登録により、Web API のアクセス許可 (スコープ) が公開されます。 アプリ登録プロセスでは、Web API を一意に識別する アプリケーション ID が生成されます (たとえば、 アプリ ID: 2)。 デスクトップ アプリ (アプリ ID: 1) に Web API スコープ (アプリ ID: 2) へのアクセス許可を付与します。

アプリケーションの登録とアーキテクチャを次の図に示します。

Web API、登録、トークンを含むデスクトップ アプリの図。

Web API の呼び出し

認証が完了した後、ユーザーがアプリと対話すると、保護された Web API が呼び出されます。 その Web API では、ベアラー トークン認証が使用されます。 ベアラー トークンは、アプリによって Azure AD B2C から取得されたアクセス トークンです。 アプリでは、HTTPS 要求の Authorization ヘッダーでトークンを渡します。

Authorization: Bearer <access token>

アクセス トークンのスコープが Web API のスコープと一致しない場合、認証ライブラリでは正しいスコープの新しいアクセス トークンが取得されます。

サインアウト フロー

サインアウト フローには、次の手順が含まれます。

  1. アプリから、ユーザーがサインアウトします。
  2. アプリによってそのセッション オブジェクトがクリアされ、認証ライブラリによってそのトークン キャッシュがクリアされます。
  3. アプリによってユーザーが Azure AD B2C サインアウト エンドポイントに移動し、Azure AD B2C セッションが終了されます。
  4. ユーザーが再びアプリにリダイレクトされます。

[前提条件]

.NET デスクトップ開発で Visual Studio 2019 を実行しているコンピューター。

手順 1: ユーザー フローを構成する

ユーザーがアプリにサインインしようとすると、ユーザー フローを介した承認エンドポイントへの認証要求がアプリによって開始されます。 ユーザー フローによって、ユーザーのエクスペリエンスが定義および制御されます。 ユーザーがユーザー フローを完了すると、Azure AD B2C によってトークンが生成され、ユーザーはアプリケーションにリダイレクトされます。

ユーザー フローまたはカスタム ポリシーの作成をまだ行っていない場合は、作成します。 手順を繰り返して、次のように 3 つの個別のユーザー フローを作成します。

  • サインインと サインアップを結合したユーザー フロー (例:)susi。 このユーザー フローでは、パスワードを忘れた 場合のエクスペリエンスもサポート されています。
  • プロファイル編集 ユーザー フロー (例: edit_profile) 。
  • パスワードのリセット ユーザー フロー (例: reset_password)。

Azure AD B2C は、 B2C_1_ ユーザー フロー名の前に付加されます。 たとえば、susiB2C_1_susiになります。

手順 2: アプリケーションを登録する

デスクトップ アプリと Web API アプリケーションの登録を作成し、Web API のスコープを指定します。

手順 2.1: Web API アプリを登録する

Web API アプリの登録 (App ID: 2) を作成するには、次の手順に従います。

  1. Azure portal にサインインします。

  2. ご自分の Azure AD B2C テナントが含まれるディレクトリを必ず使用してください。 ポータル ツールバーの [Directories + subscriptions](ディレクトリ + サブスクリプション) アイコンを選択します。

  3. [ポータルの設定] | [Directories + subscriptions](ディレクトリ + サブスクリプション) ページの [ディレクトリ名] の一覧で自分の Azure AD B2C ディレクトリを見つけて、 [切り替え] を選択します。

  4. Azure portal で、 [Azure AD B2C] を検索して選択します。

  5. [アプリの登録] を選択し、[新しい登録] を選択します。

  6. アプリケーションの名前を入力します (my-api1 など)。 [リダイレクト URI][サポートされているアカウントの種類] を既定値のままにします。

  7. 登録 を選択します。

  8. アプリ登録が完了したら、 [概要] を選択します。

  9. アプリケーション (クライアント) ID の値を記録しておきます。これは、後で Web アプリケーションを構成するときに使用します。

    Web A P I アプリケーション ID の取得方法を示すスクリーンショット。

手順 2.2: Web API アプリのスコープを構成する

  1. 作成した my-api1 アプリケーション (App ID: 2) を選択して、その [概要] ページを開きます。

  2. [ 管理] で、[ API の公開] を選択します。

  3. [アプリケーション ID URI] の横にある [設定] リンクを選択します。 既定値 (GUID) を一意の名前 (例: tasks-api) に置き換え、[保存] を選択します。

    Web アプリケーションで Web API のアクセス トークンを要求するときに、API に対して定義する各スコープのプレフィックスとしてこの URI を追加する必要があります。

  4. [この API で定義されるスコープ] で、 [スコープの追加] を選択します。

  5. API への読み取りアクセスを定義するスコープを作成するには:

    1. [スコープ名]tasks.read を入力します。
    2. [管理者の同意の表示名] で、「Read access to tasks API」を入力します。
    3. [管理者の同意の説明] で、「Allows read access to the tasks API」を入力します。
  6. [スコープの追加] を選択します。

  7. [Add a scope (スコープの追加)] を選択し、API への書き込みアクセスを定義するスコープを追加します。

    1. [スコープ名] に「tasks.write」を入力します。
    2. [管理者の同意の表示名] に、「Write access to tasks API」を入力します。
    3. [管理者の同意の説明] に、「Allows write access to the tasks API」を入力します。
  8. [スコープの追加] を選択します。

手順 2.3: デスクトップ アプリを登録する

デスクトップ アプリの登録を作成するには、次の操作を行います。

  1. Azure portal にサインインします。
  2. [アプリの登録] を選択し、[新しい登録] を選択します。
  3. [ 名前] に、アプリケーションの名前 ( desktop-app1 など) を入力します。
  4. [サポートされているアカウントの種類] で、[(ユーザー フローを使用してユーザーを認証するための) 任意の ID プロバイダーまたは組織のディレクトリのアカウント] を選択します。
  5. [ リダイレクト URI] で[ パブリック クライアント/ネイティブ (デスクトップとデスクトップ)] を選択し、[URL] ボックスに「 https://your-tenant-name.b2clogin.com/oauth2/nativeclient」と入力します。 your-tenant-nameテナント名に置き換えます。 その他のオプションについては、「 リダイレクト URI の構成」を参照してください。
  6. 登録 を選択します。
  7. アプリ登録が完了したら、 [概要] を選択します。
  8. デスクトップ アプリケーションを構成するときに、後で使用するためにアプリケーション (クライアント) ID を 記録します。 デスクトップ アプリケーション ID が強調表示されているスクリーンショット。

手順 2.4: Web API のデスクトップ アプリのアクセス許可を付与する

アプリ (アプリ ID: 1) にアクセス許可を付与するには、次の手順をおこないます。

  1. [アプリの登録] を選択し、作成したアプリを選択します (アプリ ID: 1)。

  2. [管理] で API 許可を選択します。

  3. [構成されたアクセス許可] の下で [アクセス許可の追加] を選択します。

  4. [ マイ API ] タブを選択します。

  5. Web アプリケーションへのアクセス許可が必要な API を選択します (アプリ ID: 2)。 たとえば、「my-api1」と入力します。

  6. [アクセス許可] で、 [タスク] を展開し、前に定義したスコープを選択します(たとえば、tasks.readtasks.write)。

  7. アクセス許可の追加 を選択します。

  8. [<テナント名> に管理者の同意を与えます] を選択します。

  9. [はい] を選択します。

  10. [最新の情報に更新] を選択し、両方のスコープの [状態] に、Granted for ...(... に付与されました) と表示されていることを確認します。

  11. [Configured permissions (構成済みのアクセス許可)] の一覧からスコープを選択し、スコープの完全な名前をコピーします。

    読み取りアクセス許可が付与されたことを示す、[Configured permissions (構成済みのアクセス許可)] ペインのスクリーンショット。

手順 3: サンプル Web API を構成する

このサンプルでは、デスクトップ アプリが Web API に使用できる関連するスコープを持つアクセス トークンを取得します。 コードから Web API を呼び出すには、次の操作を行います。

  1. 既存の Web API を使用するか、新しい Web API を作成します。 詳細については、「 Azure AD B2C を使用して独自の Web API で認証を有効にする」を参照してください。
  2. Web API を構成したら、Web API エンドポイントの URI をコピーします。 次の手順では、Web API エンドポイントを使用します。

ヒント

Web API がない場合でも、このサンプルを実行できます。 この場合、アプリはアクセス トークンを返しますが、Web API を呼び出すことはできません。

手順 4: WPF デスクトップ アプリのサンプルを取得する

  1. .zip ファイルをダウンロードするか、 GitHub リポジトリからサンプル Web アプリケーションを複製します。

    git clone https://github.com/Azure-Samples/active-directory-b2c-dotnet-desktop.git
    
  2. Visual Studio で active-directory-b2c-wpf ソリューション ( active-directory-b2c-wpf.sln ファイル) を開きます。

手順 5: サンプル デスクトップ アプリを構成する

active-directory-b2c-wpf プロジェクトで、App.xaml.cs ファイルを開きます。 App.xaml.cs クラス メンバーには、Azure AD B2C ID プロバイダーに関する情報が含まれています。 デスクトップ アプリでは、この情報を使用して Azure AD B2C との信頼関係を確立し、ユーザーのサインインとサインアウト、トークンの取得、検証を行います。

次のクラス メンバーを更新します。

価値
TenantName Azure AD B2C テナント名 の最初の部分 (たとえば、 contoso.b2clogin.com)。
ClientId 手順 2.3 のデスクトップ アプリケーション ID。
PolicySignUpSignIn 手順 1 で作成したサインアップまたはサインイン ユーザー フローまたはカスタム ポリシー。
PolicyEditProfile 手順 1 で作成したプロファイル ユーザー フローまたはカスタム ポリシーを編集します。
ApiEndpoint (省略可能) 手順 3 で作成した Web API エンドポイント (たとえば、 https://contoso.azurewebsites.net/hello)。
ApiScopes 手順 2.4 で作成した Web API スコープ。

最終的な App.xaml.cs ファイルは、次の C# コードのようになります。

public partial class App : Application
{

private static readonly string TenantName = "contoso";
private static readonly string Tenant = $"{TenantName}.onmicrosoft.com";
private static readonly string AzureAdB2CHostname = $"{TenantName}.b2clogin.com";
private static readonly string ClientId = "<web-api-app-application-id>";
private static readonly string RedirectUri = $"https://{TenantName}.b2clogin.com/oauth2/nativeclient";

public static string PolicySignUpSignIn = "b2c_1_susi";
public static string PolicyEditProfile = "b2c_1_edit_profile";
public static string PolicyResetPassword = "b2c_1_reset";

public static string[] ApiScopes = { $"https://{Tenant}//api/tasks.read" };
public static string ApiEndpoint = "https://contoso.azurewebsites.net/hello";

手順 6: デスクトップ アプリを実行してテストする

  1. NuGet パッケージを復元します

  2. F5 キーを押してサンプルをビルドして実行します。

  3. [サインイン] を選択し、Azure AD B2C のローカル アカウントまたはソーシャル アカウントでサインアップまたはサインインします。

    サインイン フローを開始する方法を示すスクリーンショット。

  4. サインアップまたはサインインが成功すると、トークンの詳細が WPF アプリの下部ウィンドウに表示されます。

    Azure AD B2C アクセス トークンとユーザー ID が強調表示されているスクリーンショット。

  5. [ API の呼び出し] を選択して Web API を呼び出します。

次のステップ

Azure AD B2C を使用して WPF デスクトップ アプリで認証オプションを構成する方法について説明します。