【ITニュース解説】Implementing OWIN Authentication with Microsoft Entra ID in ASP.NET Framework
2025年09月10日に「Dev.to」が公開したITニュース「Implementing OWIN Authentication with Microsoft Entra ID in ASP.NET Framework」について初心者にもわかりやすいように丁寧に解説しています。
ITニュース概要
ASP.NET Framework製アプリの認証機能を、OWINとMicrosoft Entra ID(Azure AD)で実装する方法を解説。Azure App Serviceへのデプロイから、認証不要なヘルスチェックと認証必須ページの作り方まで、具体的な手順を示す。
ITニュース解説
この記事では、ASP.NET Frameworkで開発されたウェブアプリケーションに、OWINという技術とMicrosoft Entra ID(以前はAzure ADと呼ばれていた)を組み合わせて、安全な認証機能を実装する方法を解説する。システムエンジニアを目指す初心者が、ユーザーが誰であるかを確認し、特定の情報へのアクセスを制限する仕組みを理解するための第一歩となるだろう。
まず、なぜアプリケーションに認証が必要なのかを考えてみよう。ウェブアプリケーションには、誰でもアクセスできる公開情報と、特定のユーザーのみがアクセスできる機密情報がある。例えば、会社のウェブサイトでは、製品情報は誰でも見られるが、従業員情報や顧客データは認証されたユーザーしか見られないようにする必要がある。この「誰であるか」を確認するプロセスが「認証」であり、確認されたユーザーが「何ができるか」を判断するのが「認可」である。
この記事で中心となる「Microsoft Entra ID」は、マイクロソフトが提供するクラウドベースのIDおよびアクセス管理サービスだ。これは、アプリケーションへのアクセスを厳しくチェックする中心的な役割を果たす。ユーザーの身元を確認し、そのユーザーがアプリケーションにアクセスする権限を持っているかを判断するゲートキーパーのようなものだ。
次に、「OWIN(Open Web Interface for .NET)」について説明する。これは、ASP.NETアプリケーションと、認証処理のような補助的な機能(ミドルウェアと呼ぶ)を柔軟に連携させるための標準的な方法だ。OWINを使うことで、アプリケーションの核となる部分に手を加えることなく、認証などの機能を追加したり変更したりできる。いわば、アプリケーションがユーザーからのリクエストを受け取る手前で、認証処理の流れを管理し、アプリケーションと認証の間の標準的なインターフェースを提供する役割を担う。
この認証機能を実装するために、いくつかのステップを踏む。
最初は、アプリケーションが動作する場所をクラウド上に準備する。Azureというマイクロソフトのクラウドサービスで、「App Service」という機能を使ってウェブアプリケーションの実行環境を作成する。ここでは、アプリケーションの名前や、どの地域にサーバーを置くかなどを指定する。これにより、アプリケーションがインターネット上でアクセスできるURLが決定される。このURLは後で使うので、控えておく。
次に、このアプリケーションをMicrosoft Entra IDに「登録」する作業を行う。これは、アプリケーションがEntra IDの認証サービスを利用するために、Entra IDに自身の存在を知らせるようなものだ。アプリケーションの名前を登録し、どのユーザー(テナント)がこのアプリケーションにアクセスできるかを設定する。さらに、認証が成功した後にユーザーのブラウザをどのURLに戻すか(リダイレクトURI)もここで指定する。
アプリケーションがEntra IDに登録されたら、次に認証の詳細な設定を行う。具体的には、「IDトークン」と「アクセストークン」という種類のトークン(認証情報)をアプリケーションで利用できるように有効にする。これらは、認証が成功したときにEntra IDからアプリケーションに発行され、ユーザーの身元情報やアクセス権限を示すために使われる「デジタル証明書」のようなものだ。
これでクラウド側の準備は整ったので、次はアプリケーション本体の開発に移る。開発環境として「Visual Studio 2022」を使い、ASP.NET Frameworkで新しいウェブアプリケーションプロジェクトを作成する。このとき、Visual Studioが提供する初期の認証機能は使わず、「認証なし(None)」を選択する。これは、認証機能をMicrosoft Entra IDとOWINで独自に構築するためだ。
プロジェクトが作成されたら、Microsoft Entra IDやOWINと連携するために必要な追加のソフトウェア部品(「NuGetパッケージ」と呼ばれる)をインストールする。具体的には、「Microsoft.Owin.Security.OpenIdConnect」や「Microsoft.Owin.Security.Cookies」といったパッケージだ。これらは、OpenID Connectという標準的な認証プロトコルを使ってEntra IDと通信したり、認証情報をブラウザのCookieに保存したりするための機能を提供する。
次に、アプリケーション全体の設定ファイルである「Web.Config」を修正する。ここに、Entra IDに登録したアプリケーションの識別子(ClientID)、Entra ID環境の識別子(TenantID)、そして認証後にユーザーが戻るURL(RedirectUri)といった重要な情報を追加する。これらの情報は、アプリケーションがEntra IDと正しく通信するために必須だ。
そして、アプリケーションの起動時に認証処理を設定するための特別なファイル「Startup.cs」を作成する。このファイルでOWINミドルウェアを構成する。まず、ユーザーが一度認証に成功したら、その認証情報をブラウザのCookieに保存する設定を行う。これにより、ユーザーはブラウザを閉じない限り、再度ログインする必要がなくなる。次に、OpenID Connectプロトコルを使ってMicrosoft Entra IDと連携するための設定を行う。ここでWeb.Configに記述したClientIDなどの情報が使われ、アプリケーションがEntra IDから認証サービスを受けられるようにする。この設定により、ユーザーが保護されたページにアクセスしようとすると、自動的にEntra IDのログイン画面に誘導されるようになる。
アプリケーションの機能を作成する部分では、「コントローラー」と呼ばれるものを作成する。コントローラーはユーザーからのリクエストを受け取り、どのような処理を行うかを定義する部分だ。ここでは、認証が必要なページと不要なページを明確に区別する。 例えば、「HealthCheckController」というコントローラーを作成する。これは、アプリケーションが正常に動作しているかを確認するための「ヘルスチェック」機能を提供する。この機能は、ロードバランサー(複数のサーバーへのアクセスを振り分ける装置)がサーバーの状態を監視するために利用されるため、認証なしでアクセスできるよう「[AllowAnonymous]」という属性を付与する。 一方、「ProtectedController」というコントローラーも作成する。このコントローラーが提供するページは、認証されたユーザーのみがアクセスできる「保護されたページ」だ。「[Authorize]」という属性を付与することで、このページにアクセスしようとするユーザーには、Microsoft Entra IDによる認証が強制される。認証が成功すると、ユーザー名などが表示されるページが表示されるように設定する。
これらの開発作業が完了したら、作成したアプリケーションをAzureのApp Serviceに「公開(デプロイ)」する。Visual Studioから直接、Azureアカウントを使って、先に作成しておいたApp Serviceにアプリケーションのコードをアップロードする。
最後に、アプリケーションが意図通りに動作するかをテストする。 まず、認証が不要なヘルスチェックのエンドポイントにアクセスし、ログイン画面を経由することなく正常な応答(サーバーが健康であるという情報)が返ることを確認する。 次に、保護されたページにアクセスしてみる。すると、Microsoft Entra IDのログイン画面に自動的にリダイレクトされ、認証情報(ユーザー名とパスワード)を入力してログインすると、保護されたページにアクセスできることを確認する。 もし、Entra IDに認証はされているが、そのアプリケーションへのアクセス権限がないユーザーが保護されたページにアクセスしようとした場合、アクセス拒否のメッセージが表示されることも確認する。
このように、Microsoft Entra IDとOWINミドルウェアを組み合わせることで、ASP.NET Frameworkアプリケーションに堅牢な認証システムを実装し、公開すべき情報と保護すべき情報を明確に区別できる。これにより、アプリケーションはセキュリティを確保しつつ、必要なサービスを提供できるようになるのだ。