重要
2025 年 5 月 1 日より、Azure AD B2C は新規のお客様向けに購入できなくなります。 詳細については、FAQ を参照してください。
この記事では、 Open Web Interface for .NET (OWIN) を実装する Web API で複数のトークン発行者のサポートを有効にする手法について説明します。 複数のトークン エンドポイントのサポートは、Azure Active Directory B2C (Azure AD B2C) API とそのアプリケーションを 1 つのドメインから別のドメインに移行する場合に便利です。 たとえば、 login.microsoftonline.com から b2clogin.com、 カスタム ドメインなどです。
b2clogin.com、login.microsoftonline.com、またはカスタム ドメインによって発行されたトークンを受け入れるためのサポートを API に追加することで、API から login.microsoftonline.com 発行されたトークンのサポートを削除する前に、段階的な方法で Web アプリケーションを移行できます。
次のセクションでは、 Microsoft OWIN ミドルウェア コンポーネント (Katana) を使用する Web API で複数の発行者を有効にする方法の例を示します。 コード例は Microsoft OWIN ミドルウェアに固有のものですが、一般的な手法は他の OWIN ライブラリに適用する必要があります。
[前提条件]
この記事の手順を続行する前に、次の Azure AD B2C リソースが必要です。
トークン発行者エンドポイントを取得する
まず、API でサポートする各発行者のトークン発行者エンドポイント URI を取得する必要があります。 Azure AD B2C テナントでサポートされている b2clogin.com エンドポイントと login.microsoftonline.com エンドポイントを取得するには、Azure portal で次の手順を使用します。
まず、既存のユーザー フローのいずれかを選択します。
Azure portal で Azure AD B2C テナントに移動する
[ポリシー] で、[ユーザー フロー (ポリシー)] を選択します。
B2C_1_signupsignin1など、既存のポリシーを選択し、[ユーザー フローの実行] を選択します
ページの上部付近にある [ ユーザー フローの実行 ] 見出しで、ハイパーリンクを選択して、そのユーザー フローの OpenID Connect 検出エンドポイントに移動します。
ブラウザーで開いたページで、
issuer
の値を記録します。次に例を示します。https://your-b2c-tenant.b2clogin.com/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/v2.0/
[ ドメインの選択 ] ドロップダウンを使用して他のドメインを選択し、前の 2 つの手順をもう一度実行し、その
issuer
値を記録します。
これで、次のような 2 つの URI が記録されます。
https://login.microsoftonline.com/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/v2.0/
https://your-b2c-tenant.b2clogin.com/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/v2.0/
カスタム ポリシー
ユーザー フローではなくカスタム ポリシーがある場合は、同様のプロセスを使用して発行者 URI を取得できます。
- Azure AD B2C テナントに移動する
- Identity Experience Framework の選択
- 証明書利用者ポリシーの 1 つを選択します (たとえば B2C_1A_signup_signin)
- [ ドメインの選択 ] ドロップダウンを使用してドメインを選択します ( 例: yourtenant.b2clogin.com
- OpenID Connect 検出エンドポイントの下に表示されるハイパーリンクを選択します
-
issuer
値を記録する - 他のドメインに対して手順 4 から 6 を実行します (例 : login.microsoftonline.com
サンプル コードを取得する
両方のトークン エンドポイント URI が用意されたので、両方のエンドポイントが有効な発行者であることを指定するようにコードを更新する必要があります。 例を確認するには、サンプル アプリケーションをダウンロードまたは複製してから、両方のエンドポイントを有効な発行者としてサポートするようにサンプルを更新します。
アーカイブをダウンロードする: active-directory-b2c-dotnet-webapp-and-webapi-master.zip
git clone https://github.com/Azure-Samples/active-directory-b2c-dotnet-webapp-and-webapi.git
Web API で複数の発行者を有効にする
このセクションでは、両方のトークン発行者エンドポイントが有効であることを指定するようにコードを更新します。
Visual Studio で B2C-WebAPI-DotNet.sln ソリューションを開く
TaskService プロジェクトで、エディターで TaskService\App_Start\Startup.Auth.cs ファイルを開きます
次の
using
ディレクティブをファイルの先頭に追加します。using System.Collections.Generic;
ValidIssuers
プロパティをTokenValidationParameters
定義に追加し、前のセクションで記録した両方の URI を指定します。TokenValidationParameters tvps = new TokenValidationParameters { // Accept only those tokens where the audience of the token is equal to the client ID of this app ValidAudience = ClientId, AuthenticationType = Startup.DefaultPolicy, ValidIssuers = new List<string> { "https://login.microsoftonline.com/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/v2.0/", "https://{your-b2c-tenant}.b2clogin.com/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/v2.0/"//, //"https://your-custom-domain/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/v2.0/" } };
TokenValidationParameters
は MSAL.NET によって提供され、Startup.Auth.csのコードの次のセクションで OWIN ミドルウェアによって使用されます。 複数の有効な発行者を指定すると、OWIN アプリケーション パイプラインは、両方のトークン エンドポイントが有効な発行者であることを認識します。
app.UseOAuthBearerAuthentication(new OAuthBearerAuthenticationOptions
{
// This SecurityTokenProvider fetches the Azure AD B2C metadata & from the OpenID Connect metadata endpoint
AccessTokenFormat = new JwtFormat(tvps, new tCachingSecurityTokenProvider(String.Format(AadInstance, ultPolicy)))
});
前述のように、他の OWIN ライブラリは通常、複数の発行者をサポートするための同様の機能を提供します。 すべてのライブラリの例は、この記事の範囲外ですが、ほとんどのライブラリでも同様の手法を使用できます。
Web アプリでエンドポイントを切り替える
Web API で両方の URI がサポートされるようになったので、b2clogin.com エンドポイントからトークンを取得するように Web アプリケーションを更新する必要があります。
たとえば、TaskWebApp プロジェクトの TaskWebApp\ida:AadInstance
Web.configファイルの値を変更することで、新しいエンドポイントを使用するようにサンプル Web アプリケーションを構成できます。
TaskWebApp の Web.configのida:AadInstance
値を変更して、{your-b2c-tenant-name}.b2clogin.com
ではなくlogin.microsoftonline.com
を参照するようにします。
以前は:
<!-- Old value -->
<add key="ida:AadInstance" value="https://login.microsoftonline.com/tfp/{0}/{1}" />
After ( {your-b2c-tenant}
を B2C テナントの名前に置き換えます):
<!-- New value -->
<add key="ida:AadInstance" value="https://{your-b2c-tenant}.b2clogin.com/tfp/{0}/{1}" />
Web アプリの実行中にエンドポイント文字列が構築されると、トークンを要求するときに b2clogin.com ベースのエンドポイントが使用されます。
カスタム ドメインを使用する場合:
<!-- Custom domain -->
<add key="ida:AadInstance" value="https://custom-domain/{0}/{1}" />
次のステップ
この記事では、複数の発行者エンドポイントからのトークンを受け入れるように Microsoft OWIN ミドルウェア (Katana) を実装する Web API を構成する方法について説明しました。 ご覧のように、TaskService プロジェクトと TaskWebApp プロジェクトの両方の Web.Config ファイルには、独自のテナントに対してこれらのプロジェクトをビルドして実行する場合に変更する必要がある他のいくつかの文字列があります。 プロジェクトの動作を確認する場合は、プロジェクトを適切に変更してもかまいませんが、完全な手順はこの記事の範囲外です。
Azure AD B2C によって出力されるさまざまな種類のセキュリティ トークンの詳細については、「 Azure Active Directory B2C のトークンの概要」を参照してください。