先日の記事「
GoogleのMCP Toolbox for DatabasesをOracle Databaseで使用してみる」にて構成したOracle Databaseに接続するMCP Toolbox for Databasesに、OpenID Connectによる認証を実装します。IdPにはOracle IAMを使用します。
MCP Toolbox for DatabaseでのOpenID Connectの設定については、以下で説明されています。
Documentation / Configuration / Authentication / Generic OIDC Auth
Generic OIDC Auth
MCPとしての認証は2. MCP Authorizationに記載があります。ドキュメントに記載されている設定例は以下です。
kind: authService
name: my-generic-auth
type: generic
audience: ${YOUR_TOKEN_AUDIENCE}
authorizationServer: https://your-idp.example.com
mcpEnabled: true
scopesRequired:
- read
- write
kind, name, type, mcpEnabled(これはtrueにする)は、MCP Toolboxとしての設定です。IdP側(今回はOracle IAM)から入手する必要がある設定値はaudience、authorizationServer、scopesRequiredになります。
MCP Toolboxとしては、authorizationServerの値はアクセス・トークンのiss(Issuer)の値と一致し、かつ、/.well-known/openid-configurationを加えることでOIDCのDiscovery URLとなることを期待しているようです。そのDiscovery URLより取得できるドキュメントに含まれる属性jwks_uriより、JWTの署名検証用の公開鍵を取得します。
Oracle IAMが発行するトークンのデフォルトの発行者(Issuer - issの値)はhttps://identity.oraclecloud.com/です。この発行者に/.well-known/openid-configurationをつけてもOIDC Discovery URLにはならないため、Oracle IAM側の発行者は変更する必要があります。
audienceはOracle IAMのドメインに作成した統合アプリケーションのプライマリ・オーディエンスとして設定した値になります。プライマリ・オーディエンスを設定するには、統合アプリケーションにリソース・サーバーを構成する必要があります。
Oracle IAMではクライアントから提示されたスコープにより、リソース・サーバーが選択されます。そのため、リソース・サーバーにスコープを設定し、そのスコープがユーザー認証時にサーバーに送信されるように接続元のクライアント(今回はMCP Inspector)を構成する必要があります。リソース・サーバーに構成されたスコープは、MCP ToolboxのscopesRequiredに含めます。
MCP Toolboxに設定する値は、上記のように決まります。
以下より、Oracle IAMのドメインでの設定を行います。作業には費用がかからないドメイン・タイプがFreeの、Defaultドメインを使用します。
Oracle Cloudのコンソールから、アイデンティティとセキュリティのドメインを開きます。
ドメインDefaultを開きます。
ドメインURLをコピーします。このURLに/.well-known/openid-configurationを付けるとOIDC Discovery URLとなります。この値がMCP ToolboxのauthorizationServerの値の元になります。MCP ToolboxはauthorizationServerの値がIssuerの値であることを期待しているため、このドメインURLを発行者とする必要があります。ドメインURLの末尾のポート番号:443があると発行者として設定できないため、発行者として登録するURLから:443を削除します。
結果としてMCP ToolboxのauthorizationServerとして設定する値は、ドメインURLから末尾の:443を除いたURLになります。
発行者を上記のドメインURLに変更します。
セキュリティ・タブを選択し、Oauth設定 - デフォルトのトークン発行ポリシーのOAuth設定の編集を開きます。
デフォルトのトークン発行ポリシーの発行者にドメインURL(ポート番号無し)を設定します。
変更の保存をクリックします。
デフォルトのトークン発行ポリシーの
発行者が更新されたことを確認します。
統合アプリケーションを作成します。
統合アプリケーション・タブを開き、アプリケーションの追加をクリックします。
アプリケーションのタイプとして機密アプリケーションを選択します。
ワークフローの起動をクリックします。
作成する機密アプリケーションの名前はMCP Hotelsとします。説明は何でもよいのですが、Search for a hotelと記述しています。認証と認可の権限付与を認可として実施はオンにします。
以上を設定して送信します。
統合アプリケーション
MCP Hotelsが作成されます。
OAuth構成・タブを選択し、OAuth構成の編集をクリックします。リソース・サーバー構成とクライアント構成の双方を実施します。
クライアント構成はリソース・サーバーの構成を参照するため、リソース・サーバー構成を先に実施します。
このアプリケーションをリソース・サーバーとして今すぐ構成します、を選択します。選択すると、設定画面が表示されます。
必須ではありませんが、トークン・リフレッシュの許可をオンにします。
プライマリ・オーディエンスはMCP Toolbox for Databasesの構成に依存します。今回はローカルホストでデフォルトのポート番号である5000番で接続を待ち受けるように構成しているため、プライマリ・オーディエンスは以下になります。最後にスラッシュをつけます。
http://localhost:5000/
これはMCP Toolboxのaudienceとして設定する値になります。また、MCP Toolboxの起動オプションの--toolbox-urlとして指定する値でもあります。
スコープの追加をオンにし、スコープとしてmcphotelsを追加します。
ここで設定したスコープmcphotelsは、MCP ToolboxのscopesRequiredに含めます。
リソース・サーバーを構成したところで、一旦送信します。
追加したスコープ
mcphotelsは、
表示名を
MCP Hotels、
説明に
Search for a hotel.としています。
先ほどと同様にOAuth構成の編集を開き、今度はクライアント構成を実施します。
このアプケーションをクライアントとして今すぐ構成します、を選択します。選択すると、設定画面が表示されます。
認可の認可される権限付与タイプとして、クライアント資格証明(これはおそらく無くてもよい)、リフレッシュ・トークン(リソース・サーバーでリフレッシュ・トークンを構成し、クライアントからもリフレッシュ・トークンを要求する場合に必要)、認可コード(必須)をチェックします。
HTTPS以外のURLを許可をオンにし、今回クライアントとして使用するMCP InspectorのリダイレクトURLとして、以下の4つを設定します。
http://localhost:6274/oauth/callback
http://localhost:6274/oauth/callback/debug
http://127.0.0.1:6274/oauth/callback
http://127.0.0.1:6274/oauth/callback/debug
Claude CodeやOpenAI Codexから呼び出す場合は、それぞれのアプリケーションで決められているリダイレクトURLを追加します。
ページの下に移動し、リソースの追加をオンにします。
スコープの追加をクリックし、スコープとして統合アプリケーションMCP Hotelsのhttp://localhost:5000/mcphotels(リソース・サーバーのプライマリ・オーディエンスhttp://localhost:5000/とスコープmcphotelsが連結)を追加します。
以上で送信します。
リソースの追加を行う画面です。
統合アプリケーションMCP Hotelsより範囲(スコープのこと)の選択にある、スコープhttp://localhost:5000/mcphotelsにチェックを入れます。
ここで選択したスコープhttp://localhost:5000/mcphotelsは、MCP InspectorのOAuth設定のスコープに含めます。
以上で統合アプリケーションMCP Hotelsの構成は完了です。
OAuth構成よりクライアントIDとクライアント・シークレットを取得します。
これらの値は、MCP InspectorのOAuth SettingsのClient IDとClient Secretとして設定します。
作成した統合アプリケーション
MCP Hotelsを
アクティブ化します。
ユーザー・タブを開き、この統合アプリケーションで認証できるユーザーを割り当てます。
ユーザーの割当てをクリックします。
今回の作業を行なっているユーザーを割り当てます。
作成した統合アプリケーションで認証できるユーザーが割り当てられました。
以上で、Oracle IAMでの作業は完了です。
先日の記事で作成したtools.yamlに以下を追記します。OIDC認証の設定oracle-iam-authに加え、アクセス・トークンのsubクレームの値を表示するツールshow_sub_claimを定義しています。
ツールshow_sub_claimの第1パラメータとしてuser_idを設定しています。この値はauthServicesで設定しているoracle-iam-auth、つまりOracle IAMによるOIDC認証で得られたアクセス・トークンのsubの値になります。この値はSELECT文のバインド変数:1に割り当てられます。user_idはパラメータとして定義しているため、MCP Inspectorからツールを呼び出す際に値の入力を求められます。値を入力してもアクセス・トークンのsubの値で置き換えられますが、requiredにfalseを設定(デフォルトはtrueなので、必ず値が必要)することにより、user_idを入力しなくてもツールを実行できるようにしています。
---
kind: authService
name: oracle-iam-auth
type: generic
authorizationServer: [発行者として設定したドメインURL(ポート番号無し)]
audience: http://localhost:5000/
mcpEnabled: true
scopesRequired:
- openid
- mcphotels
---
# show sub claim in access token
kind: tool
name: show_sub_claim
type: oracle-sql
source: my-oracle-instance
statement: |
SELECT :1 sub from dual
description: |
Show sub claim value in the access token
parameters:
- name: user_id
type: string
required: false
description: Auto-populated from token
authServices:
- name: oracle-iam-auth
field: sub
authRequired:
- oracle-iam-auth
MCP Toolboxを実行する際に--toolbox-urlとしてaudience(resource)を指定します。
./toolbox --config tools.yaml --toolbox-url http://localhost:5000/
mcp-toolbox % ./toolbox --config tools.yaml --toolbox-url http://localhost:5000/
2026-09-08T13:20:06.905274+09:00 INFO "Starting MCP Toolbox for Databases version 1.10.0+binary.darwin.arm64.21f972f"
2026-09-08T13:20:06.983898+09:00 INFO "Initialized 1 sources: my-oracle-instance"
2026-09-08T13:20:08.061104+09:00 INFO "Initialized 1 authServices: orcle-iam-auth"
2026-09-08T13:20:08.061141+09:00 INFO "Initialized 0 embeddingModels: "
2026-09-08T13:20:08.06143+09:00 INFO "Initialized 4 tools: show_sub_claim, execute_sql, list_all_hotels, list_hotels_in_the_location"
2026-09-08T13:20:08.061451+09:00 INFO "Initialized 0 prompts: "
2026-09-08T13:20:08.061472+09:00 INFO "Initialized 1 groups: default"
2026-09-08T13:20:08.061722+09:00 WARN "wildcard (*) allows any website to access the primitives. This creates a security risk regardless of whether you are in a production or local development environment. Recommended to use --allowed-origins with specific local addresses."
2026-09-08T13:20:08.061774+09:00 WARN "wildcard (*) hosts allow any domain to access this resource, making it vulnerable to DNS rebinding attacks regardless of whether you are in a production or local development environment. For improved security, use the --allowed-hosts flag to specify trusted domains."
2026-09-08T13:20:08.062055+09:00 INFO "Server ready to serve!"
MCP Inspectorに登録済みのMCP ToolboxのServer Settingsを開きます。
OAuth SettingsのClient ID、Client Secret、Scopesを設定します。Scopesに設定する値は以下です。指定するスコープにプライマリ・オーディエンスを含めます。
openid http://localhost:5000/mcphotels
以上で設定はすべて完了です。
動作確認を実施します。
MCP InspectorよりMCP ToolboxのMCPサーバーに接続します。
Oracle CloudのIdentity Domainへのサインインが求められます。
Authenticatorを使ったユーザー認証が行われサインインが完了すると、アプリケーションMCP Hotelsへのアクセス許可が要求されます。
アクセスを許可すると、MCP Toolboxへの接続が完了します。
Toolsタブを開き、ツール
show_sub_claimを選択します。
パラメータuser_idには値を設定できますが、user_idの値はアクセス・トークンのsubの値に置き換えられるため、設定する意味はありません。
user_idには値を設定せずExecute Toolを実行します。
ツールの実行結果として、SUBにサインインに使用したメール・アドレスが返されます。
ツールoracle-sqlに設定するSELECT文にOIDCで認証したユーザー名を渡せるため、ツールの検索範囲をユーザーごとに制限することができます。
今回の記事は以上になります。
完