Cover image

GROWI に Entra ID の OIDC/SSO ログインを設定する

はじめに

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 側の設定

アプリを作り、必要な値を控えます。

アプリケーションの登録

  1. Azure Portal にアクセスします。
  2. 追加 > アプリを登録 を選択します。
  3. 下記表に合わせて各項目を入力します。
  4. 登録 を選択します。

項目値1値2
名前(任意)GROWI
サポートされているアカウントの種類シングル テナントのみ
リダイレクト URI(本番の場合)Webhttps://<自身のホストの値>/passport/oidc/callback
リダイレクト URI(検証の場合)Webhttp://localhost:3000/passport/oidc/callback

  1. 作成後、次の値を控えます。
    • アプリケーション(クライアント)ID
    • ディレクトリ(テナント)ID


クライアントシークレットの作成

  1. 作成したアプリ登録を開きます。
  2. 証明書とシークレットを選択します。
  3. 新しいクライアント シークレット を選択します。
    • 説明:growi-oidc など識別できる名称を入力します。
    • 有効期限: 180日 を選択します。検証は短めでも構いませんが、本番運用では長めを選びます(期限切れ前に更新します)。
  4. 表示される 値 を控えます。
    ※ 後から再表示できません。
    • シークレットID


2️⃣ GROWI 側の設定

OIDC 認証の有効化

GROWI の管理画面で OIDC(OpenID Connect)認証を有効にします。

  1. http://localhost:3000/admin にアクセスします。
  2. 左のナビゲーションで セキュリティ設定 を選択します。
  3. 認証機構設定で、 OIDC のタブを選択します。
  4. OIDCを有効にする を選択します。
  5. 設定Attribute Mapping (オプション) で以下の表に合わせて各項目入力します。
  6. 更新 ボタンを押します。

設定

項目備考
プロバイダ名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 URLhttps://login.microsoftonline.com/<TENANT_ID>/discovery/v2.0/keys

Attribute Mapping (オプション)

項目
Identifiersub
usernamename
名前name
Emailemail


検証

ログイン手順

  1. http://localhost:3000 で動作しているGROWIにアクセスします。
  2. OIDCでログイン を選択します。
  3. EntraID にリダイレクトされるので、資格情報を入力します。
  4. 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": "[email protected]"
}

Entra ID から返却される属性:

{
  "sub": "aP5TTRPx3n_BMD9FSdcUeARyLF1aAcC0JL9wEll5Ztw",
  "name": "山田 太郎",
  "picture": "https://graph.microsoft.com/v1.0/me/photo/$value",
  "email": "[email protected]"
}


⚠️ 既知の制限事項と注意点

属性マッピングに関する注意

Entra ID から GROWI が取得できる属性は限定的です。

現在取得できている属性:

属性説明用途
subSubject IDユーザーの一意識別子
name表示名ユーザー名として使用
emailメールアドレスEmail として使用(必須)
pictureプロフィール画像URLアイコン表示

必須条件

  • Email 属性が設定されているユーザーのみログイン可能
  • M365 ライセンスを持つユーザー推奨

現在確認されている制約

  • preferred_username(ユーザープリンシパル名)が取得できません
  • upn(User Principal Name)が取得できません
  • Entra ID のトークン構成で上記を追加しても、GROWI 側で取得されません

影響:

  • ユーザー名が日本語表示名になります(例:山田 太郎
  • メールアドレス形式のユーザー名([email protected])にはなりません

今後の対応:

  • 環境変数での調整可能性を調査中
  • GROWI リポジトリのソースコード確認・カスタマイズを検討中


まとめ

本記事では、GROWI に Entra ID を使った OIDC 認証を設定する手順を紹介しました。

ポイント

  • ✅ セルフホストの GROWI でも OIDC 設定が可能
  • ⚠️ Email 属性を持つユーザー(M365 ライセンス保持者推奨)のみログイン可能
  • ⚠️ ユーザー名が日本語表示名になる制約あり

今後の課題

  • preferred_usernameupn が取得できない問題の解決
  • 環境変数やソースコードレベルでのカスタマイズ検討