Microsoft Entra ID コネクター
English: Microsoft Entra ID connector
Entra コネクターの役割は次の 2 つで、この順に提供します。
- サインイン。 テナントが発行した OpenID Connect の ID トークンを検証し、「この人は組織の アカウントでサインインした」ことを Kurahi が信頼できるようにします。
- ディレクトリの参照(追加で有効化)。 エージェントがユーザーを、上位のレベルではグループと 所属も参照できます。読み取り専用です。
| 項目 | 内容 |
|---|---|
| プラグイン ID | entra(同梱、既定は無効) |
| サインインのスコープ | openid、profile、email、offline_access、User.Read |
| ディレクトリのスコープ | User.ReadBasic.All(basic)または Directory.Read.All(full、管理者の同意が必要) |
| 書き込み | なし。ディレクトリを変更することはありません |
| 状態 | 提供中 |
管理者が Microsoft Entra で行う設定
「管理者が Microsoft Entra で行う設定」の見出し- アプリの登録 > 新規登録 でシングル テナントのアプリを作ります(グループ内の複数テナントから
サインインさせる場合だけマルチテナントにし、
allowedTenantsに列挙します)。 - リダイレクト URI:パブリック クライアント/ネイティブ (モバイルとデスクトップ)、
http://localhost。 - 認証 で パブリック クライアント フローを許可する を はい にします(デバイス コードでの
サインイン用)。トークン構成 は必須ではありません(
emailは任意)。 - API のアクセス許可 > Microsoft Graph > 委任されたアクセス許可:
openid、profile、email、offline_access、User.Read。ディレクトリ参照にはUser.ReadBasic.All(basic)またはDirectory.Read.All(full)を追加します。Directory.Read.Allには必ず 管理者の同意を与えます が必要です。 - アプリケーション (クライアント) ID と ディレクトリ (テナント) ID を控えます。クライアント シークレットは不要です。
Microsoft 365 コネクターのアプリ登録にこれらのアクセス許可を追加して、共用することもできます。
Kurahi の設定
「Kurahi の設定」の見出しkurahi plugins enable entrakurahi config set plugins.entries.entra.config '{ "tenantId": "<ディレクトリ (テナント) ID>", "clientId": "<アプリケーション (クライアント) ID>", "directory": "basic"}' --jsonkurahi entra login # サインインし、ID トークンを検証(nonce 付き)kurahi entra probe # テナントの署名鍵の取得とサインインの有効性を確認kurahi entra verify-token < id_token.txt| キー | 既定値 | 意味 |
|---|---|---|
tenantId |
なし | テナント GUID または確認済みドメイン。organizations は allowedTenants と併用時のみ |
clientId |
なし | アプリケーション (クライアント) ID。ID トークンの aud として期待する値 |
allowedTenants |
設定したテナント | サインインを認めるテナント GUID |
directory |
off |
off、basic(ユーザー)、full(ユーザーとグループ) |
redirectPort |
ランダム | ループバックのポートを固定 |
probeIntervalMinutes |
15 | 接続確認の間隔(分) |
ID トークンの検証内容
「ID トークンの検証内容」の見出しEntraOidcValidator(src/connectors/business/oidc.ts)は、次のすべてを満たすトークンだけを受け入れます。
- 3 つの部分からなるコンパクト形式の JWS で、16 KB 以下。
algがRS256。noneや HMAC 系のアルゴリズムは拒否。kidがテナントの JWKS にある鍵を指す。鍵はテナントの OpenID 構成 (https://login.microsoftonline.com/<テナント>/v2.0/.well-known/openid-configuration)から取得し、 6 時間キャッシュします。未知のkid(鍵の更新)があれば再取得しますが、5 分に 1 回までです。 鍵の文書はlogin.microsoftonline.comから HTTPS で取得したものだけを受け入れます。- ヘッダーとペイロードに対する RSA 署名。
issがテナントの発行者(https://login.microsoftonline.com/<tid>/v2.0)と一致。tidがallowedTenantsに含まれる(既定は設定したテナントのみ)。audがclientIdと一致。exp、nbf、iatが 2 分の時刻ずれの範囲内。- 呼び出し側が nonce を送った場合は
nonceが一致(login コマンドは常に送ります)。
拒否した場合は理由を 1 つ(wrong_audience、expired、bad_signature など)だけ返し、
トークンの内容は返しません。
ゲートウェイとデスクトップのシングル サインオン:実装済みの部分と残り
「ゲートウェイとデスクトップのシングル サインオン:実装済みの部分と残り」の見出し実装済み:
- 上記の検証処理。正常、期限切れ、有効期間前、対象者違い、発行者違い、テナント違い、署名不正、
algの取り違え、鍵の更新、Microsoft 以外の鍵文書について、テストがあります。 kurahi entra login:実際の対話型サインイン(PKCE、nonce)。ID トークンが検証に通らない限り サインインを受け入れません。kurahi entra verify-token:標準入力から受け取った ID トークンを検証します。
未実装:ゲートウェイの接続時の認証で使えるのは、ゲートウェイ トークン、パスワード、ペアリング済み デバイスのトークン、確認済みの Tailscale の ID で、外部の ID プロバイダーを組み込む拡張点が ありません。Entra をゲートウェイとデスクトップのサインインにするために残っている作業は次のとおりです。
- ゲートウェイ認証(
src/gateway/auth.tsのauthorizeGatewayConnect)にoidc方式を追加し、connectフレームのトークンを検証処理に渡す。 - 検証済みの ID(
tidとoid)を Kurahi のロールとスコープに対応付ける。管理者が管理する 許可リストを設ける(ディレクトリ参照によるグループ所属の利用も一案)。 - デスクトップ:システムのブラウザーで PKCE サインインを行い、リフレッシュ トークンを OS の キーリングに保存し、期限前に ID トークンを更新する。
- 検証済みのサインインを短期間有効なペアリング済みデバイスのトークンに交換し、既存のセッション 管理と取り消しの仕組みを唯一の経路として保つ。
ディレクトリのツール
「ディレクトリのツール」の見出し| ツール | レベル | 内容 |
|---|---|---|
entra_users_search |
basic | 名前、メール、サインイン名が検索語で始まるユーザー |
entra_user_get |
basic | オブジェクト ID またはユーザー プリンシパル名で 1 人を参照 |
entra_groups_search |
full | 名前が検索語で始まるグループ |
entra_group_members |
full | グループの直接のメンバー |
entra_user_groups |
full | ユーザーが直接所属するグループ |
basic で返すのは名前、メール、サインイン名だけです(User.ReadBasic.All で取得できる範囲)。
full では役職と部署も返します。
データの扱い
「データの扱い」の見出し- ディレクトリの名前はテナント内の人が設定するものなので、信頼できない外部コンテンツの境界の 内側でモデルに渡します。
- 監査ログ(
connector.entra.<操作>)にはオブジェクト ID と件数だけを記録し、名前やアドレスは 記録しません。対話型サインインが成功した場合は、テナントとオブジェクト ID を記録します。 - トークンは Kurahi のシークレット ストアに保存します。ID トークンは保存しません。
- 通信先は
login.microsoftonline.comとgraph.microsoft.comのみです。
状態と取り消し
「状態と取り消し」の見出し接続確認ではテナントの署名鍵を取得し、GET /me を呼び出します。デスクトップのカタログが
稼働中 と表示するのは、25 時間以内の確認が成功した場合だけです。kurahi entra logout は保存した
トークンを削除します。発行元でアクセスを止めるには、Microsoft Entra で同意またはセッションを
取り消してください。
このリリースの制限
「このリリースの制限」の見出し- グローバルの Microsoft クラウドのみ。
- ゲートウェイとデスクトップのサインインはまだ Entra と結び付いていません(上記参照)。