jpskill.com
🛠️ 開発・MCP コミュニティ

oracle-idcs-org-provisioning

OAuthログイン後、IDCSの情報を基に組織へのメンバーシップを自動で割り当て、初回管理者設定やテナントと組織のマッピングなど、ユーザー情報を効率的に管理・設定するSkill。

📜 元の英語説明(参考)

Use when mapping IDCS claims to org membership after OAuth login succeeds. Covers mapProfileToUser, session.create.before, session.create.after hooks, MERGE INTO upserts, tenant-org mapping, and first-admin bootstrap. Keywords: IDCS groups, org_members, provisioning, session hooks, tenant map, MERGE INTO.

🇯🇵 日本人クリエイター向け解説

一言でいうと

OAuthログイン後、IDCSの情報を基に組織へのメンバーシップを自動で割り当て、初回管理者設定やテナントと組織のマッピングなど、ユーザー情報を効率的に管理・設定するSkill。

※ jpskill.com 編集部が日本のビジネス現場向けに補足した解説です。Skill本体の挙動とは独立した参考情報です。

⚡ おすすめ: コマンド1行でインストール(60秒)

下記のコマンドをコピーしてターミナル(Mac/Linux)または PowerShell(Windows)に貼り付けてください。 ダウンロード → 解凍 → 配置まで全自動。

🍎 Mac / 🐧 Linux
mkdir -p ~/.claude/skills && cd ~/.claude/skills && curl -L -o oracle-idcs-org-provisioning.zip https://jpskill.com/download/9174.zip && unzip -o oracle-idcs-org-provisioning.zip && rm oracle-idcs-org-provisioning.zip
🪟 Windows (PowerShell)
$d = "$env:USERPROFILE\.claude\skills"; ni -Force -ItemType Directory $d | Out-Null; iwr https://jpskill.com/download/9174.zip -OutFile "$d\oracle-idcs-org-provisioning.zip"; Expand-Archive "$d\oracle-idcs-org-provisioning.zip" -DestinationPath $d -Force; ri "$d\oracle-idcs-org-provisioning.zip"

完了後、Claude Code を再起動 → 普通に「動画プロンプト作って」のように話しかけるだけで自動発動します。

💾 手動でダウンロードしたい(コマンドが難しい人向け)
  1. 1. 下の青いボタンを押して oracle-idcs-org-provisioning.zip をダウンロード
  2. 2. ZIPファイルをダブルクリックで解凍 → oracle-idcs-org-provisioning フォルダができる
  3. 3. そのフォルダを C:\Users\あなたの名前\.claude\skills\(Win)または ~/.claude/skills/(Mac)へ移動
  4. 4. Claude Code を再起動

⚠️ ダウンロード・利用は自己責任でお願いします。当サイトは内容・動作・安全性について責任を負いません。

🎯 このSkillでできること

下記の説明文を読むと、このSkillがあなたに何をしてくれるかが分かります。Claudeにこの分野の依頼をすると、自動で発動します。

📦 インストール方法 (3ステップ)

  1. 1. 上の「ダウンロード」ボタンを押して .skill ファイルを取得
  2. 2. ファイル名の拡張子を .skill から .zip に変えて展開(macは自動展開可)
  3. 3. 展開してできたフォルダを、ホームフォルダの .claude/skills/ に置く
    • · macOS / Linux: ~/.claude/skills/
    • · Windows: %USERPROFILE%\.claude\skills\

Claude Code を再起動すれば完了。「このSkillを使って…」と話しかけなくても、関連する依頼で自動的に呼び出されます。

詳しい使い方ガイドを見る →
最終更新
2026-05-18
取得日時
2026-05-18
同梱ファイル
1

📖 Skill本文(日本語訳)

※ 原文(英語/中国語)を Gemini で日本語化したものです。Claude 自身は原文を読みます。誤訳がある場合は原文をご確認ください。

Oracle IDCS Org プロビジョニング

ログインが成功したが、テナント、ロール、または組織のメンバーシップが Oracle でまだ有効になっていない場合に使用します。

次の場合はロードしないでください

  • 問題が Fastify ヘッダーブリッジングまたは Cookie/セッション転送である場合
  • 問題が基本的な OIDC の設定、コールバック URL、または信頼できるオリジンである場合
  • タスクが既存のコードベース全体で IDCS の概念の名前を変更することである場合

3 段階のフロー

  1. OAuth プロファイルマッピング中に IDCS クレームをキャプチャします (mapProfileToUser)
  2. 明示的な許可ルールが存在する場合、session.create.before でセッションをゲートします
  3. session.create.after で組織を解決し、org_members を upsert します

絶対に

  • アクセスゲートとロールマッピングを組み合わせないでください。これらは別々の失敗モードを持つ別々の決定です
  • org_members に対して SELECT してから INSERT しないでください。アトミックな MERGE INTO を使用しないと、同時ログインがメンバーシップを破損させます
  • before でキャッシュされたクレームを消費し、after でまだ利用可能であると期待しないでください。stash/peek/consume パターンを使用してください
  • より新しいフォールバックで既存のメンバーシップの優先順位をバイパスしないでください。再ログインの不安定さが続きます
  • groups クレームがないことをプロビジョニングのバグだと決めつけないでください。最初にスコープ構成と IDCS アプリを確認してください

エキスパート向けの意思決定ツリー

アクセスゲート vs. ロールマッピング

これらは異なる質問に答えます。

  • アクセスゲート (before フック): このユーザーはそもそも入室できますか? DB で構成された許可グループによって制御されます。明示的な許可グループが存在する場合のみクローズドで失敗し、それ以外の場合はオープンで失敗します。
  • ロールマッピング (after フック): どのロールを取得しますか? group→role マッピングと環境のデフォルトによって制御されます。

これらを混在させると、誤ったロックアウトが発生します。ユーザーはアクセスゲートを通過しますが、ゲートロジックがロール解決をショートカットしたため、間違ったロールを取得します。

組織解決の優先順位

常にこの順序を使用してください。「簡略化」のためにレベルをスキップしないでください。

  1. org_members の既存のメンバーシップ
  2. テナント名 → 組織マップ (DB で構成)
  3. DB で構成されたデフォルト組織
  4. 環境のデフォルト組織

この順序をデプロイメント中に変更すると、以前に優先順位の高いルールで割り当てられたユーザーの再ログインが中断されます。

最初の管理者ブートストラップ

新規インストールには、管理者グループの構成がありません。組織にまだ管理者がいない場合は、最初にプロビジョニングされたユーザーを一度だけ admin に昇格させます。このゲートがないと、システムはブートストラップできません。誰も管理者権限を持っていないため、誰も許可グループを構成できません。

フック境界を越えたクレームキャッシュ

フックは、個別のリクエストライフサイクルで実行されます。mapProfileToUser からのクレームセットは、明示的な受け渡しなしに session.create.after で利用できません。

  • プロファイルマッピングで stash(sub, claims)
  • beforepeek(sub) (クリアせずに読み取り)
  • afterconsume(sub) (読み取りとクリア)

sub をキーとする短寿命のインメモリキャッシュを使用するのが標準的なパターンです。TTL は約 30 秒で十分です。

意思決定ポイントごとの失敗モード

状況 決定
groups クレームがない プロビジョニングコードに触れる前に、スコープと IDCS アプリの構成を確認してください
明示的な DB 許可グループがない オープンで失敗します — ロックアウトはありません
DB のルックアップまたは書き込みが失敗する ログインに対してオープンで失敗し、ログに記録します — ロックアウトは決してデフォルトの結果であってはなりません
組織にまだ管理者がいない 最初にプロビジョニングされたユーザーを一度だけ昇格させます

スクリプト

# グループ → ロールマッピングのプレビュー
node scripts/preview-group-role-mapping.js "PortalAdmins,Developers"

# 組織解決のプレビュー
node scripts/verify-org-resolution.js --tenant sandbox --map "sandbox:org-123,prod:org-999" --default-org org-000

引数

  • $ARGUMENTS: オプションのプロビジョニングフォーカス
    • tenant-map — tenant→org 解決に焦点を当てる
    • first-admin — ブートストラップロジックに焦点を当てる
    • (空) — 完全な IDCS クレーム → 組織メンバーシップフローを評価する
📜 原文 SKILL.md(Claudeが読む英語/中国語)を展開

Oracle IDCS Org Provisioning

Use when login succeeds but tenant, role, or org membership still has to become real in Oracle.

Do NOT load when

  • problem is Fastify header bridging or cookie/session forwarding
  • problem is base OIDC setup, callback URLs, or trusted origins
  • task is renaming IDCS concepts across an existing codebase

Three-stage flow

  1. Capture IDCS claims during OAuth profile mapping (mapProfileToUser)
  2. Gate session in session.create.before when explicit allow-rules exist
  3. Resolve org and upsert org_members in session.create.after

NEVER

  • Never combine access gating with role mapping — they are separate decisions with separate failure modes
  • Never SELECT then INSERT into org_members — use atomic MERGE INTO or concurrent logins corrupt membership
  • Never consume cached claims in before and expect them still available in after — use stash/peek/consume pattern
  • Never bypass existing membership precedence with a newer fallback — re-login instability follows
  • Never assume missing groups claim is a provisioning bug — check scope config and IDCS app first

Expert decision trees

Access gate vs. role mapping

These answer different questions:

  • Access gate (before hook): can this user enter at all? Controlled by DB-configured allow-groups. Fail closed only when explicit allow-groups exist; fail open otherwise.
  • Role mapping (after hook): which role do they get? Controlled by group→role mapping and env defaults.

Mixing them produces false lockouts: a user passes the access gate but gets the wrong role because the gating logic short-circuited role resolution.

Org resolution precedence

Always use this order — never skip a level for "simplicity":

  1. Existing membership in org_members
  2. Tenant-name → org map (DB-configured)
  3. DB-configured default org
  4. Env default org

Changing this order mid-deployment breaks re-login for users who were previously assigned via a higher-precedence rule.

First-admin bootstrap

Fresh installs have zero admin-group config. If an org has no admin yet, promote the first provisioned user to admin once. Without this gate, the system is unbootstrappable — no one can configure allow-groups because no one has admin rights.

Claims cache across hook boundary

Hooks run in separate request lifecycles. The claim set from mapProfileToUser is not available in session.create.after without explicit passing:

  • stash(sub, claims) in profile mapping
  • peek(sub) in before (read without clearing)
  • consume(sub) in after (read and clear)

Using a short-lived in-memory cache keyed by sub is the standard pattern. TTL of ~30s is sufficient.

Failure modes by decision point

Situation Decision
No groups claim Check scope and IDCS app config before touching provisioning code
No explicit DB allow-groups Fail open — no lockout
DB lookup or write fails Fail open for login, log it — lockout must never be the default outcome
Org has no admin yet Promote first provisioned user once

Scripts

# Preview group → role mapping
node scripts/preview-group-role-mapping.js "PortalAdmins,Developers"

# Preview org resolution
node scripts/verify-org-resolution.js --tenant sandbox --map "sandbox:org-123,prod:org-999" --default-org org-000

Arguments

  • $ARGUMENTS: Optional provisioning focus
    • tenant-map — focus on tenant→org resolution
    • first-admin — focus on bootstrap logic
    • (empty) — evaluate the full IDCS claim → org membership flow