IR-Brain Azure認証構成メモ
1. 全体概要
IR-Brain は Microsoft Entra ID でユーザー認証し、アプリから Managed Identity で Key Vault と Azure OpenAI に接続する構成を採用している。秘密情報は Key Vault で一元管理し、アプリコードに固定値を持たせない。
User ↓ Microsoft Entra ID Login ↓ Blazor Server (App Service) ↓ Managed Identity ↓ Key Vault ↓ Azure OpenAI
2. 今回採用した認証方式
- Microsoft Entra ID を使用
- App Registration を作成
- マルチテナント対応
- App Service 上の Blazor Server から OpenID Connect でログイン
- Tenant 未設定時は
commonを利用
必須設定
AZUREAD_CLIENT_IDAZUREAD_CLIENT_SECRET
任意設定
AZUREAD_TENANT_ID- Instance:
https://login.microsoftonline.com/
3. App Registration 設定内容
| 項目 | 設定値 |
|---|---|
| アプリ名 | ir-brain |
| Supported account types | 任意の Entra ID テナント + 個人 Microsoft アカウント |
| Platform type | Web |
| Redirect URI (本番) | https://ir-brain-hkgxf7engvcbdcah.eastasia-01.azurewebsites.net/signin-oidc |
| Redirect URI (ローカル) | https://localhost:5001/signin-oidc |
注意点
- redirect_uri は完全一致が必須
/signin-oidcを必ず付与するhttpではなくhttpsを使用する- 末尾スラッシュ違いで失敗するため URL 文字列を固定で管理する
4. Key Vault の役割
- APIキーや Client Secret をコードに書かないために使用
- App Service の Managed Identity から Secret を取得
- Key Vault は Azure RBAC モードで作成
- 今回利用は Secret のみ(Key / Certificate は未使用)
5. 現在登録している Secret
| Secret 名 | 用途 |
|---|---|
AZUREAD-CLIENT-ID |
Microsoft ログインの Client ID |
AZUREAD-CLIENT-SECRET |
Microsoft ログインの Client Secret |
AZURE-OPENAI-API-KEY |
Azure OpenAI APIキー |
補足: Key Vault の Secret 名の -- は .NET 設定で : に変換される。
Stripe--SecretKey => Stripe:SecretKey
6. Managed Identity 設定
- App Service の System Assigned Managed Identity を有効化
| 対象 | ロール | 用途 |
|---|---|---|
| Key Vault | Key Vault Secrets User |
Secret 読み取り |
| Azure OpenAI | Cognitive Services OpenAI User |
OpenAI 推論利用 |
7. Azure OpenAI の設定
- Azure OpenAI リソース作成済み
- 現在は APIキー利用あり
- 将来的には Managed Identity 接続へ移行可能
- モデル呼び出し時は
modelではなくdeployment nameを使用
例: gpt-4o-mini
8. App Service 側の構成
- Blazor Server を App Service にデプロイ
- SQLite は Azure App Service 向けに
HOME/dataを利用 - Static Web Apps ではなく App Service を使用
500.30発生時は起動例外(Program.cs / DI / DB / 認証初期化)を優先確認
9. よくあるハマりポイント
| 症状・ミス | 確認ポイント |
|---|---|
| redirect_uri 不一致 | App Registration の URI と実アクセス URL を完全一致させる |
/signin-oidc 付け忘れ | OIDC の callback path を URL 末尾に含める |
| App Registration と実アクセスURLの不一致 | 本番 URL / ローカル URL を個別登録する |
| Key Vault の権限不足 | Managed Identity に Key Vault Secrets User があるか確認 |
| RBAC反映待ち | ロール付与後は数分待って再試行する |
| SQLite の保存先が不正 | HOME/data 配下に置く |
| OpenAI で deployment name 未使用 | 実デプロイ名(例: gpt-4o-mini)を指定する |
| App Service に Publish していない | ローカル実行と Azure 実行を混同しない |
| Static Web Apps と App Service を混同 | 本プロジェクトは App Service 前提の設定で統一する |
500.30 | Program.cs / DI / DB / 認証初期化の例外ログを確認する |
10. 今後追加予定の Secret
| Secret 名 | 用途メモ |
|---|---|
Stripe--SecretKey | Stripe 秘密鍵 |
Stripe--WebhookSecret | Webhook 検証用シークレット |
RESEND-API-KEY | メール送信 APIキー |
ADMIN-PASSWORD | 管理者用パスワード |
ConnectionStrings--Default | .NET 接続文字列 (ConnectionStrings:Default) |
ADMIN-EMAIL | 管理者通知先メールアドレス |
11. 確認手順
ローカル確認
- App Registration に
https://localhost:5001/signin-oidcを追加 - Microsoft ログインを実行して callback 成否を確認
- Azure CLI ログイン / Visual Studio 認証状態を確認
Azure 確認
- App Service に Publish
- Entra ID ログイン確認
- Key Vault Secret 読み取り確認
- Azure OpenAI 接続確認
- App Service Log Stream 確認
12. サンプルコード
Program.cs の考え方
- Key Vault を構成に追加
- AzureAd 設定(Client ID / Secret / Tenant)を取得
- OpenID Connect を構成
- Azure OpenAI クライアントを接続
var clientId = builder.Configuration["AZUREAD-CLIENT-ID"];
var clientSecret = builder.Configuration["AZUREAD-CLIENT-SECRET"];
var tenantId = builder.Configuration["AZUREAD_TENANT_ID"] ?? "common";
メモ: 実装では null/空文字チェックと起動時ログ出力を加えると障害切り分けが早い。