ラベル MCP Toolbox の投稿を表示しています。 すべての投稿を表示
ラベル MCP Toolbox の投稿を表示しています。 すべての投稿を表示

2026年9月8日火曜日

MCP Toolbox for DatabasesをOracle IAMでOIDC認証する

先日の記事「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で認証したユーザー名を渡せるため、ツールの検索範囲をユーザーごとに制限することができます。

今回の記事は以上になります。

完