MCP Connector 1.2 - MCP サーバーへのセキュリティの適用

MCP Connector により MCP クライアントのサーバー側認証が可能になります。これらの例では、ステートフルなサーバー送信イベント (SSE) 接続と ​On New Session Listener​ ソースを使用して、OAuth アクセストークンの検証を含むカスタムセキュリティロジックを実装します。

On New Session Listener を使用したサーバー側認証

MCP 仕様ではセッション管理を強調し、SSE 接続では状態を維持します。​On New Session Listener​ ソースでは、サーバー側認証を実装するための重要なポイントが提供されます。この例は、このリスナーでトリガーされる基本フローを示しており、自動生成された ​sessionId​ と、接続しているクライアントにより送信された HTTP ヘッダーへのアクセス方法を示しています。これらはその後、カスタム認証ロジックで使用できます。

これは、​On New Session Listener​ ソースを使用するサンプルフローです。

<flow name="onNewSession">
   <mcp:on-new-session-listener config-ref="MCP_Server"/>

   <logger level="INFO" message="#['new session id: $(payload.sessionId)']"/>
   <logger level="INFO" message="#['http headers:  $(payload.additionalProperties)']"/>
</flow>

このフローは、新しいクライアントが MCP サーバーアプリケーションに接続するたびに実行されます。ペイロードには自動生成された ​sessionId​ と ​additionalProperties​ が含まれています。SSE 接続種別を使用する場合、これらは HTTP リクエストヘッダーにマッピングされます。

この時点で独自の認証ロジックを実装できます。たとえば、​#[payload.additionalProperties.authorization]​ 式で HTTP 認証ヘッダーを取得し、後で検証することができます。

OAuth アクセストークンの検証

必要に応じて、​Mule OAuth 2.0 プロバイダー​を使用して、OAuth アクセストークンの実装と検証を行うことができます。

このサンプルフローでは、OAuth プロバイダーを使用してアクセストークンが検証され、トークンが無効な場合はセッションが拒否されます。

<flow name="onNewSession">
  <mcp:on-new-session-listener config-ref="MCP_Server">
<mcp:rejection rejectWithStatusCode="#[vars.rejectStatusCode]" rejectWithMessage="#[vars.rejectMessage]" />
  </mcp:on-new-session-listener>
  <oauth2-provider:validate-token scopes="#[['PUBLIC_READ']]" config-ref="external-oauth2-provider" accessToken="#[payload.additionalProperties.authorization]"/>
        <error-handler>
                <on-error-continue type="OAUTH2-PROVIDER:TOKEN_UNAUTHORIZED">
                    <set-variable variableName="rejectWithStatusCode" value="401" />
                    <set-variable variableName="rejectWithMessage" value="#[error.description]" />
                </on-error-continue>
            </error-handler>
</flow>

次のいずれかに該当する場合、新しいセッションは拒否されます。

  • rejectWithStatusCode​ パラメーターに null 以外の値 (または null 以外の値に解決する式) が割り当てられている、または

  • フローが失敗した場合、状況コード 500 が報告される

この例では、状況コードが ​401 - UNAUTHORIZED​ コードにマッピングされるように OAuth 検証エラーが処理されます。

クライアント側認証

クライアントでは、認証パラメーターは、HTTP Connector と ​OAuth Module​ (これもプロジェクトに追加されている場合) で定義されたすべての認証戦略を受け入れます。

Call Tool​ などの操作は追加のプロパティも受け入れます。SSE の場合、このプロパティはリクエストヘッダーにマッピングされます。これにより、API キーなどのカスタム認証ヘッダーを追加することができます。次に例を示します。

<mcp:call-tool config-ref="MCP_GMaps_Client" toolName="maps_geocode">
    <mcp:arguments ><![CDATA[#[output application/java
---
{
	address: payload.address
}]]]></mcp:arguments>
<mcp:additional-properties ><![CDATA[
#[output application/java
---
{
	"API_KEY" : p('api.key')
}]]]>
</mcp:additional-properties>
</mcp:call-tool>

次のステップ

コネクタを設定したら、​​を試すことができます。