【第23回】Azureで社内システム再現（クラウド編）｜Azure App Service × Entra ID で社内用WebアプリにSSO認証を追加

## 概要

これまでの「オンプレ編」では、Azure の仮想マシン（IaaS）を使って、社員番号から名前を検索できるシンプルな社内システムを構築してきました。Active Directory、SQL Server、ADFS などを組み合わせ、オンプレミスの構成を仮想的に再現しています。

※全体構成の詳細は、[【第0回】Azureで社内システム再現（オンプレ編）｜構成図と動作の流れ](https://qiita.com/your-link-here) をご参照ください。

クラウド編では、これまでの構成をベースにしつつ、Azure のマネージドサービス（PaaS）を中心とした構成へ段階的に移行していきます。

※クラウド移行全体の設計方針については、[【第10.5回】Azureで社内システム再現（クラウド編）｜オンプレ構成をどうクラウドに移行するか？](https://qiita.com/saba_infra/items/4ff691131593e947d6cf) にまとめています。

## システム構成（今回の対象範囲）

今回のテーマは、**Azure App Service にデプロイした自作Webアプリに対して、Microsoft Entra IDを用いたSSO（シングルサインオン）構成を実現すること**です。

まず、下図は「クラウド編」におけるシステム全体の構成を示したものです。

![スクリーンショット 2025-04-22 14.12.32.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4037248/918b6eb2-5fcc-4306-9927-dd4ae243d6b1.png)


このうち、**赤枠で示している App Service と Entra ID を利用したSSO認証の部分**が、今回の対象範囲です。

---

今回は以下の作業を行いました。

- App Service に対して Entra ID を ID プロバイダーとして構成  
- Azureポータルにサインインした状態でWebアプリにアクセスし、SSOが成立することを確認



### App Service で ID プロバイダーを追加する

Azure App Service に SSO（シングルサインオン）機能を組み込むために、認証の設定から「ID プロバイダー」を追加します。

![スクリーンショット 2025-04-04 15.15.09.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4037248/741f1686-63bc-447e-aa71-8e2f2d45285d.png)

ここで言う「ID プロバイダー」とは、**ログイン処理を行う外部の認証基盤（＝IdP）を指定する**という意味になります。

---

### Entra ID を ID プロバイダーとして指定する

今回は、**Microsoftを認証プロバイダーとして使用**します。  
Web アプリは社内用のため、「従業員用（この組織のアカウントのみ）」という構成を選択しています。

![スクリーンショット 2025-04-04 15.24.50.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4037248/106d8885-99f8-4086-9cdd-16e38ec0b2d4.png)

アプリ登録はまだ行っていなかったため、「新しいアプリの登録」を選択しました。

---

### アプリ登録設定（デフォルト）

アプリ登録時の各項目は以下の通りです。

![スクリーンショット 2025-04-04 15.24.59.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4037248/de14382f-3c2d-4d89-adf0-f113cb79d6e8.png)

- **名前**：Entra ID 上に登録されるアプリの名前。ここでは `employee-app` としています。
- **クライアントシークレットの有効期限**：180日が推奨値です。
- **サポートされているアカウントの種類**：今回は自社のテナント `azuretest0905.com` 内のユーザーのみを対象とするため、「現在のテナント - 単一テナント」を選択しています。

---

### 付与されるアクセス権（User.Read）

アプリ登録と同時に、**Microsoft Graph API に対して `User.Read` のアクセス許可が自動で付与されます**。

![スクリーンショット 2025-04-04 15.19.16.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4037248/5b74a82d-1805-482e-b727-adef8995cc54.png)

ただし、今回のアプリでは Graph API を通じて Entra ID のユーザー情報にアクセスする予定はなく、**この権限は実際には使用されません**。  

---
## SSOの動作確認（Azureポータル → 自作Webアプリ）

今回は、**Entra IDによるSSO構成が正しく機能しているか**を確認するために、  
Azureポータルへ一度ログインした後、自作Webアプリ  
（[https://www.azuretest0905.com](https://www.azuretest0905.com)）に  
認証なしでアクセスできるかどうかを検証しました。

---

### 使用ユーザー：`user1007@azuretest0905.com`

今回の確認には、テスト用ユーザー `user1007` を使用しました。  
このユーザーは事前に Entra ID に登録済みで、今回のSSO構成の検証対象となるユーザーです。

![スクリーンショット 2025-04-22 13.58.49.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4037248/3ab8fec1-6ea3-4471-97d0-fc1cf53092f3.png)

---

### Azureポータルにログイン

まず、VNet上に作成したVMから、Azureポータルにアクセスします。

![スクリーンショット 2025-04-08 11.13.09.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4037248/a4298ec1-2d96-423a-86ad-b107c85c9c88.png)

ユーザーIDを入力するとサインイン画面が表示されるため、パスワードを入力し「はい」を選択してログインを許可します。

![スクリーンショット 2025-04-08 11.13.37.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4037248/a65a5750-fca3-42a1-8411-574866234dde.png)

ログインに成功すると、Azureポータルのトップページが表示されました。

![スクリーンショット 2025-04-08 11.13.56.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4037248/08b550ab-5a09-4035-8896-051bc4faffee.png)

この時点で、**ブラウザにはEntra IDの認証セッション（SSO用Cookie）が保持されている状態**になります。

---

### 自作Webアプリにアクセス

続けて、自作Webアプリである `https://www.azuretest0905.com` にアクセスしました。

![スクリーンショット 2025-04-22 14.02.19.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4037248/628aec74-3d44-46d9-ae80-ff3f1270720d.png)

ログイン画面は表示されず、**自動的にEntra IDにリダイレクト → 認証済みとしてWebアプリのページが表示**されました。

これで、同一ブラウザセッション内でEntra IDのSSOが成立していることを確認できました。

---