はじめに
GROWI という OSS の Wiki ツールで Entra ID(旧 Azure AD)による OIDC による SSO ログインを設定します。
このブログで得られること:
- Entra ID アプリ登録の手順
- GROWI での OIDC 設定方法
- 既知の制限事項と回避策
検証の目的
自身の PC からhttp://localhost:3000で稼働している GROWI に対して、Entra ID を用いた OIDC(SSO)ログインが成功することを確認します。
前提となる環境
- GROWI
- EC2 上のコンテナで稼働している
- EC2 内部では
localhost:3000でアクセス可能 - EC2 のプライベートネットワーク上では
-
<プライベートIPアドレス>:3000でアクセス可能
- クライアント
- 自身の PC から VS Code(Remote-SSH)で EC2 に接続できる
- VS Code のポートフォワーディングを利用できる
- Entra ID
- 既存のユーザーがディレクトリに存在している
- アプリ登録を作成できる権限がある
- 操作ユーザー
- Entra ID でEmail 属性が使えるユーザー(M365関連のライセンス有)
1️⃣ EntraID 側の設定
アプリを作り、必要な値を控えます。
アプリケーションの登録
- Azure Portal にアクセスします。
-
追加>アプリを登録を選択します。 - 下記表に合わせて各項目を入力します。
-
登録を選択します。
| 項目 | 値1 | 値2 |
|---|---|---|
| 名前(任意) | GROWI | |
| サポートされているアカウントの種類 | シングル テナントのみ | |
| リダイレクト URI(本番の場合) | Web | https://<自身のホストの値>/passport/oidc/callback |
| リダイレクト URI(検証の場合) | Web | http://localhost:3000/passport/oidc/callback |
- 作成後、次の値を控えます。
-
アプリケーション(クライアント)ID -
ディレクトリ(テナント)ID
-
クライアントシークレットの作成
- 作成したアプリ登録を開きます。
-
証明書とシークレットを選択します。 -
新しいクライアント シークレットを選択します。- 説明:
growi-oidcなど識別できる名称を入力します。 - 有効期限:
180日を選択します。検証は短めでも構いませんが、本番運用では長めを選びます(期限切れ前に更新します)。
- 説明:
- 表示される 値 を控えます。
※ 後から再表示できません。-
値 -
シークレットID
-
2️⃣ GROWI 側の設定
OIDC 認証の有効化
GROWI の管理画面で OIDC(OpenID Connect)認証を有効にします。
-
http://localhost:3000/adminにアクセスします。 - 左のナビゲーションで
セキュリティ設定を選択します。 - 認証機構設定で、
OIDCのタブを選択します。 -
OIDCを有効にするを選択します。 -
設定とAttribute Mapping (オプション)で以下の表に合わせて各項目入力します。 -
更新ボタンを押します。
設定
| 項目 | 値 | 備考 |
| プロバイダ名 | EntraID | |
| 発行ホスト | https://login.microsoftonline.com/<TENANT_ID>/v2.0 | |
| クライアントID | <CLIENT_ID> | アプリ登録 → 概要 → アプリケーション(クライアント)ID |
| クライアントシークレット | <CLIENT_SECRET> | アプリ登録 → 証明書とシークレット → クライアントシークレットの「値」 |
| 認可エンドポイント | https://login.microsoftonline.com/<TENANT_ID>/oauth2/v2.0/authorize | ログイン開始時にユーザーを認証 |
| トークンエンドポイント | https://login.microsoftonline.com/<TENANT_ID>/oauth2/v2.0/token | 認証コードをアクセストークンに交換 |
| 失効エンドポイント | https://login.microsoftonline.com/<TENANT_ID>/oauth2/v2.0/logout | トークンの無効化(ログアウト) |
| 検証エンドポイント | (空でも可) | |
| ユーザ情報エンドポイント | (空でも可) | |
| セッション終了エンドポイント | https://login.microsoftonline.com/<TENANT_ID>/oauth2/v2.0/logout | |
| 登録エンドポイント | (空でも可) | |
| JSON Web Key Set URL | https://login.microsoftonline.com/<TENANT_ID>/discovery/v2.0/keys |
Attribute Mapping (オプション)
| 項目 | 値 |
|---|---|
| Identifier | sub |
| username | name |
| 名前 | name |
検証
ログイン手順
-
http://localhost:3000で動作しているGROWIにアクセスします。 -
OIDCでログインを選択します。 - EntraID にリダイレクトされるので、資格情報を入力します。
- GROWI にログインできれば完了です。
ログ確認
docker logs --tail 50 growi-app-1 | grep "mapping response"
正常なログイン時の出力
{
"name": "growi:routes:login-passport",
"hostname": "ac065d950f5c",
"pid": 1,
"level": 20,
"msg": "mapping response to userInfo",
"time": "2026-03-11T05:35:14.941Z",
"v": 0
}
マッピング結果:
// GROWI 側で生成されるユーザー情報
{
"id": "aP5TTRPx3n_BMD9FSdcUeARyLF1aAcC0JL9wEll5Ztw",
"username": "山田 太郎",
"name": "山田 太郎",
"email": "taro.yamada@example.com"
}
Entra ID から返却される属性:
{
"sub": "aP5TTRPx3n_BMD9FSdcUeARyLF1aAcC0JL9wEll5Ztw",
"name": "山田 太郎",
"picture": "https://graph.microsoft.com/v1.0/me/photo/$value",
"email": "taro.yamada@example.com"
}
⚠️ 既知の制限事項と注意点
属性マッピングに関する注意
Entra ID から GROWI が取得できる属性は限定的です。
現在取得できている属性:
| 属性 | 説明 | 用途 |
|---|---|---|
sub | Subject ID | ユーザーの一意識別子 |
name | 表示名 | ユーザー名として使用 |
email | メールアドレス | Email として使用(必須) |
picture | プロフィール画像URL | アイコン表示 |
必須条件
- ✅ Email 属性が設定されているユーザーのみログイン可能
- M365 ライセンスを持つユーザー推奨
現在確認されている制約
-
preferred_username(ユーザープリンシパル名)が取得できません -
upn(User Principal Name)が取得できません - Entra ID のトークン構成で上記を追加しても、GROWI 側で取得されません
影響:
- ユーザー名が日本語表示名になります(例:
山田 太郎) - メールアドレス形式のユーザー名(
taro@example.com)にはなりません
今後の対応:
- 環境変数での調整可能性を調査中
- GROWI リポジトリのソースコード確認・カスタマイズを検討中
まとめ
本記事では、GROWI に Entra ID を使った OIDC 認証を設定する手順を紹介しました。
ポイント
- ✅ セルフホストの GROWI でも OIDC 設定が可能
- ⚠️ Email 属性を持つユーザー(M365 ライセンス保持者推奨)のみログイン可能
- ⚠️ ユーザー名が日本語表示名になる制約あり
今後の課題
-
preferred_usernameやupnが取得できない問題の解決 - 環境変数やソースコードレベルでのカスタマイズ検討