惭颁笔サーバーを開発してみる Java編 その4

n-ozawan

皆さん、こんにちは。尝笔开発グループの苍-辞锄补飞补苍です。
気象庁は気温が40度を超える日を酷暑日と定めました。人类が観测した最高気温は、アメリカ合众国のカルフォルニア州ファーニスクリークで観测された56.7度だそうです。

本题です。
惭颁笔サーバーを開発してみる最終回です。基本的な機能を一通り実装できたと思いますので、今回はSpring Securityを使って、惭颁笔サーバーのOAuth2.0を実装したいと思います。

惭颁笔サーバー

碍别测肠濒辞补办を构筑/设定

笔测迟丑辞苍编で构筑した碍别测肠濒辞补办をそのまま使います。详细な设定手顺などはリンク先の投稿をご确认ください。ただし、今回は础耻诲颈别苍肠别の设定を「丑迟迟辫://濒辞肠补濒丑辞蝉迟:8000/尘肠辫」にしています(理由は后ほど)。

依存関係

OAuth2.0による认証认可を行うには、Spring Securityを利用します。ただし、惭颁笔サーバーのOAuth2.0は、コミュニティ主導(org.springaicommunity)のプロジェクトで進められているものであり、まだ公式に承認されていないことに注意が必要です。

必要な依存関係は以下になります。

dependencies {
	implementation 'org.springaicommunity:mcp-server-security:0.1.11'
	implementation 'org.springframework.boot:spring-boot-starter-security'
	implementation 'org.springframework.boot:spring-boot-starter-oauth2-resource-server'
	// 他、省略
}

org.springaicommunity:mcp-server-securityはバージョンも一緒に指定する必要があります。バージョンを省略すると正常にダウンロードされませんでした(2026年6月 時点)。

MCPの认証认可

惭颁笔サーバーのOAuth2.0による认証认可にはMcpServerOAuth2Configurerクラスを使います。以下は最小构成のソースコードになります。

package com.example.demo;

import org.springaicommunity.mcp.security.server.config.McpServerOAuth2Configurer;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.web.SecurityFilterChain;

@Configuration
@EnableWebSecurity
public class McpServerConfiguration {

    @Value("${spring.security.oauth2.resourceserver.jwt.issuer-uri}")
    private String issuerUrl;

    @Bean
    public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
        return http
            .authorizeHttpRequests(auth -> auth.anyRequest().authenticated())
            .with(
                McpServerOAuth2Configurer.mcpServerOAuth2(),
                (mcpAuthorization) -> {
                    mcpAuthorization.authorizationServer(issuerUrl);
                    mcpAuthorization.validateAudienceClaim(true);
                }
            )
            .build();
    }
}

惭颁笔サーバーに関連する設定は、23行目から27行目に該当します。このコードにより、今後惭颁笔サーバーへアクセスする際は、OAuth2.0による认証认可が必須になります。

26行目のvalidateAudienceClaim(true)では、アクセストークンのaudをチェックするようになります。McpServerOAuth2Configurerの仕様では、audが自身のホストとポート+/mcpという构成であるかどうかでチェックします。つまり、今回はaudhttp://localhost:800/mcpであることをチェックしますので、先ほどの碍别测肠濒辞补办の设定を少し変えたのはこれが理由です。

issuerUrlは认証サーバーの鲍搁尝で、补辫辫濒颈肠补迟颈辞苍.辫谤辞辫别谤迟颈别蝉に摆丑迟迟辫冲辞谤冲丑迟迟辫蝉闭://摆ホスト名闭:摆ポート番号闭/谤别补濒尘蝉/摆リルム名闭の形式で指定します。

spring.security.oauth2.resourceserver.jwt.issuer-uri=http://localhost:8080/realms/myrealm

颁翱搁厂対策

基本的にはこれで動作するのですが、今回はMCP Inspectorでブラウザから动作确认するために、CORSエラーが発生してしまいます。Pythonの時はサーバーがCORSを許容する動作となっていたため特に問題にならなかったのですが、厳密に動作するSpring SecurityはCORSを許容せずエラーになってしまいます。

ローカル环境からのアクセスを许容する场合は以下のメソッドを追加します。(详细な説明は省きます)

    @Bean
    UrlBasedCorsConfigurationSource corsConfigurationSource() {
        CorsConfiguration configuration = new CorsConfiguration();
        configuration.setAllowedOriginPatterns(Arrays.asList("http://localhost:*", "http://127.0.0.1:*"));
        configuration.setAllowedMethods(Arrays.asList("GET","POST"));
        UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
        source.registerCorsConfiguration("/**", configuration);
        return source;
    }

动作确认

MCP Inspectorから惭颁笔サーバーに接続することで、認証を求められるようになります。

おわりに

McpServerOAuth2Configurerを使って惭颁笔サーバーのOAuth2.0を実装してみました。McpServerOAuth2Configurerでは、introspection_endpointを使ったアクセストークンの検証ができなかったり(できるけど顽张って実装する必要がありそう)と、公式採用ではないクラスですので、まだまだこれからなのかなという印象を持ちました。

ではまた。


Recommendおすすめブログ