クイック スタート: ASP.NET Web アプリからユーザーのサインインと Microsoft Graph API の呼び出しを行う
このクイックスタートでは、ASP.NET Web アプリケーションで Microsoft Entra アカウントを持つユーザーをサインインさせる方法を示すコード サンプルをダウンロードして実行します。
図については、「このサンプルのしくみ」を参照してください。
前提条件
- アクティブなサブスクリプションが含まれる Azure アカウント。 無料でアカウントを作成できます。
- Visual Studio 2022
- .NET Framework 4.7.2 以降
アプリを登録してダウンロードする
ヒント
この記事の手順は、開始するポータルによって若干異なる場合があります。
アプリケーションを作成するにあたっては、自動構成と手動構成という 2 つの選択肢があります。
自動構成
アプリを自動的に構成したうえでコード サンプルをダウンロードする場合は、これらの手順に従います。
- クラウド アプリケーション管理者以上の権限で Microsoft Entra 管理センター クイックスタート エクスペリエンスにサインインします。
- アプリケーションの名前を入力し、 [登録] を選択します。
- 画面の指示に従ってダウンロードし、1 回クリックするだけで、新しいアプリケーションが自動的に構成されます。
手動構成
アプリケーションとコードサンプルを手動で構成する場合は、次の手順を使用します。
手順 1:アプリケーションの登録
- クラウド アプリケーション管理者以上として Microsoft Entra 管理センターにサインインします。
- 複数のテナントにアクセスできる場合は、上部のメニューの [設定] アイコン を使い、[ディレクトリとサブスクリプション] メニューからアプリケーションを登録するテナントに切り替えます。
- [ID]>[アプリケーション]>[アプリの登録] に移動し、[新規登録] を選びます。
- [名前] に、アプリケーションの名前を入力します。 たとえば、「ASPNET-Quickstart」と入力します。 この名前は、アプリのユーザーに表示される場合があります。また、後で変更することができます。
- [リダイレクト URI] の種類を [Web] に設定し、値を
https://localhost:44368/
に設定します。 - [登録] を選択します。
- [管理] で、 [認証] を選択します。
- [Implicit grant and hybrid flows](暗黙的な許可およびハイブリッド フロー) セクションで、 [ID トークン] を選択します。
- [保存] を選択します。
手順 2:プロジェクトのダウンロード
ヒント
Windows におけるパスの長さの制限に起因したエラーを防ぐため、ドライブのルートに近いディレクトリをアーカイブの展開先またはリポジトリのクローン先とすることをお勧めします。
手順 3:プロジェクトを実行する
ルート フォルダーに近いローカル フォルダーに .zip ファイルを展開します。 たとえば、C:\Azure-Samples に展開します。
Windows におけるパスの長さの制限に起因したエラーを防ぐため、ドライブのルートに近いディレクトリをアーカイブの展開先とすることをお勧めします。
Visual Studio でソリューションを開きます (AppModelv2-WebApp-OpenIDConnect-DotNet.sln)。
Visual Studio のバージョンによっては、プロジェクト AppModelv2-WebApp-OpenIDConnect-DotNet を右クリックして [NuGet パッケージの復元] を選択することが必要になる場合があります。
[表示]>[その他のウィンドウ]>[パッケージ マネージャー コンソール] を選択してパッケージ マネージャー コンソールを開きます。 次に、
Update-Package Microsoft.CodeDom.Providers.DotNetCompilerPlatform -r
を実行します。appsettings.json を編集し、
ClientId
、Tenant
、redirectUri
の各パラメーターを次のように置き換えます。"ClientId" :"Enter_the_Application_Id_here" /> "TenantId": "Enter_the_Tenant_Info_Here" /> "RedirectUri" :"https://localhost:44368/" />
このコードでは:
Enter_the_Application_Id_here
は、先ほど作成したアプリの登録のアプリケーション (クライアント) ID です。 Microsoft Entra 管理センターの [アプリの登録] にあるアプリの [概要] ページで、アプリケーション (クライアント) ID を見つけます。Enter_the_Tenant_Info_Here
には、次のいずれかを選択します。- アプリケーションでサポートされるのが [所属する組織のみ] である場合、この値をディレクトリ (テナント) ID またはテナント名 (例:
contoso.onmicrosoft.com
) に置き換えます。 Microsoft Entra 管理センターの [アプリの登録] にあるアプリの [概要] ページで、ディレクトリ (テナント) ID を見つけます。 - アプリケーションで任意の組織のディレクトリ内のアカウントがサポートされる場合は、この値を
organizations
に置き換えます。 - アプリケーションで [すべての Microsoft アカウント ユーザー] がサポートされる場合は、この値を
common
に置き換えます。
- アプリケーションでサポートされるのが [所属する組織のみ] である場合、この値をディレクトリ (テナント) ID またはテナント名 (例:
redirectUri
は、先ほど Microsoft Entra 管理センターの [アプリの登録] で入力した [リダイレクト URI] です。
詳細情報
このセクションでは、ユーザーをサインインさせるために必要なコードの概要を示します。 この概要は、コードの働きや主な引数、また既存の ASP.NET アプリケーションにサインインを追加する方法を理解するうえで役立ちます。
このサンプルのしくみ
OWIN ミドルウェア NuGet パッケージ
ASP.NET で OpenID Connect を使用して Cookie ベースの認証を行うために、OWIN ミドルウェア パッケージを使用して認証パイプラインをセットアップできます。 これらのパッケージは、Visual Studio 内のパッケージ マネージャー コンソールから次のコマンドを実行してインストールできます。
Install-Package Microsoft.Identity.Web.Owin
Install-Package Microsoft.Identity.Web.GraphServiceClient
Install-Package Microsoft.Owin.Security.Cookies
OWIN スタートアップ クラス
OWIN ミドルウェアでは、ホスト プロセスの開始時に実行される "スタートアップ クラス" が使用されます。 このクイックスタートでは、ルート フォルダーに startup.cs ファイルがあります。 次のコードは、このクイックスタートで使用されるパラメーターを示しています。
public void Configuration(IAppBuilder app)
{
app.SetDefaultSignInAsAuthenticationType(CookieAuthenticationDefaults.AuthenticationType);
app.UseCookieAuthentication(new CookieAuthenticationOptions());
OwinTokenAcquirerFactory factory = TokenAcquirerFactory.GetDefaultInstance<OwinTokenAcquirerFactory>();
app.AddMicrosoftIdentityWebApp(factory);
factory.Services
.Configure<ConfidentialClientApplicationOptions>(options => { options.RedirectUri = "https://localhost:44368/"; })
.AddMicrosoftGraph()
.AddInMemoryTokenCaches();
factory.Build();
}
Where | 説明 |
---|---|
ClientId |
Azure portal に登録されているアプリケーションのアプリケーション ID。 |
Authority |
ユーザーが認証するためのセキュリティ トークン サービス (STS) エンドポイント。 通常、パブリック クラウドでは https://login.microsoftonline.com/{tenant}/v2.0 になります。 この URL の {tenant} には、テナントの名前またはテナント ID を指定するか、共通エンドポイントへの参照を表す common を指定します (共通エンドポイントは、マルチテナント型のアプリケーションで使用されます。) |
RedirectUri |
Microsoft ID プラットフォームに対する認証後にユーザーが誘導される URL。 |
PostLogoutRedirectUri |
サインオフ後にユーザーが誘導される URL。 |
Scope |
要求されているスコープのスペース区切りリスト。 |
ResponseType |
認証からの応答に承認コードと ID トークンを含めるという要求。 |
TokenValidationParameters |
トークン検証のためのパラメーター リスト。 この場合、ValidateIssuer は false に設定され、任意の個人、あるいは職場または学校のアカウント タイプからのサインインを受け付け可能であることを示します。 |
Notifications |
OpenIdConnect メッセージに対して実行できるデリゲートのリスト。 |
認証チャレンジ
コントローラーで認証チャレンジを要求することによって、ユーザーにサインインを強制することができます。
public void SignIn()
{
if (!Request.IsAuthenticated)
{
HttpContext.GetOwinContext().Authentication.Challenge(
new AuthenticationProperties{ RedirectUri = "/" },
OpenIdConnectAuthenticationDefaults.AuthenticationType);
}
}
ヒント
この方法を使用して認証チャレンジを要求するかどうかは任意です。 通常、認証されたユーザーと認証されていないユーザーの両方に、なんらかのビューへのアクセスを用意したい場合に、これを使用します。 代わりに、次のセクションで説明する方法を使ってコントローラーを保護することもできます。
コントローラーまたはコントローラー アクションを保護するための属性
コントローラーまたはコントローラー アクションは、[Authorize]
属性を使用して保護することができます。 この属性は、認証されたユーザーにのみコントローラーのアクションへのアクセスを許可することで、コントローラーまたはアクションへのアクセスを制限します。 認証チャレンジは、[Authorize]
属性によって修飾されたいずれかのアクションまたはコントローラーに対して非認証ユーザーがアクセスを試みると自動的に実行されます。
コントローラーから Microsoft Graph を呼び出す
次のコードのように、コントローラーの GetGraphServiceClient
拡張メソッドを使用して GraphServiceClient のインスタンスを取得することで、コントローラーから Microsoft Graph を呼び出すことができます。
try
{
var me = await this.GetGraphServiceClient().Me.GetAsync();
ViewBag.Username = me.DisplayName;
}
catch (ServiceException graphEx) when (graphEx.InnerException is MicrosoftIdentityWebChallengeUserException)
{
HttpContext.GetOwinContext().Authentication.Challenge(OpenIdConnectAuthenticationDefaults.AuthenticationType);
return View();
}
ヘルプとサポート
サポートが必要な場合、問題をレポートする場合、またはサポート オプションについて知りたい場合は、開発者向けのヘルプとサポートに関するページを参照してください。
次のステップ
アプリケーションや新機能の構築についての完全なステップ バイ ステップ ガイドについては、ASP.NET チュートリアルをお試しください。このクイックスタートの完全な説明も含まれています。