@@ -434,10 +434,9 @@ DPoP作为独立的通用组件,协议可以选择性使用:
434434 await self ._handle_403_response(response, request)
435435 ```
436436
437- 2 . ** OAuthClientProvider适配**
438- - 将` OAuthClientProvider ` 改为` OAuth2Protocol ` 实现
439- - 保持现有API不变(向后兼容)
440- - 内部使用` MultiProtocolAuthProvider `
437+ 2 . ** OAuthClientProvider 保持为 OAuth 逻辑唯一实现(最大程度复用)**
438+ - ** 不** 将 OAuth 逻辑迁出到 OAuth2Protocol;新增 ` run_authentication(http_client, ...) ` 供多协议路径调用
439+ - 保持现有 API 不变(向后兼容);OAuth2Protocol 为薄适配层,内部委托 ` OAuthClientProvider.run_authentication `
441440
4424413 . ** 协议上下文扩展**
443442 ``` python
@@ -940,8 +939,8 @@ DPoP作为独立的通用组件,协议可以选择性使用:
940939#### 3.5.3 OAuth协议实现
941940
942941** 新建文件** : ` src/mcp/client/auth/protocols/oauth2.py `
943- - ` OAuth2Protocol ` 类(实现` AuthProtocol ` )
944- - 将现有 ` OAuthClientProvider ` 逻辑迁移到这里
942+ - ` OAuth2Protocol ` 类(实现` AuthProtocol ` ), ** 薄适配层 **
943+ - ** 不 ** 迁移 OAuth 逻辑到此文件; ` authenticate(context) ` 内构造 ` OAuthClientProvider ` 、填充上下文后调用 ` provider.run_authentication(context.http_client) ` 复用现有实现
945944- 可选:实现` DPoPEnabledProtocol ` 扩展接口(阶段4)
946945
947946#### 3.5.4 服务器端验证器
@@ -1126,9 +1125,9 @@ graph TD
11261125** 目标** :完成OAuth协议适配和向后兼容优化
11271126
11281127** 任务清单** :
1129- - [ ] 实现` OAuth2Protocol ` 类
1130- - [ ] 将现有 ` OAuthClientProvider ` 逻辑迁移
1131- - [ ] 实现 ` OAuthClientProvider ` 向后兼容包装
1128+ - [ ] 实现` OAuth2Protocol ` 类(薄适配层,委托 ` OAuthClientProvider.run_authentication ` )
1129+ - [ ] 在 ` OAuthClientProvider ` 中新增 ` run_authentication(http_client, ...) ` ,复用现有 401 分支逻辑
1130+ - [ ] 保持 ` OAuthClientProvider ` 现有 API 与行为不变(向后兼容)
11321131- [ ] 实现PRM端点扩展
11331132- [ ] 实现凭证存储扩展
11341133- [ ] 编写集成测试
@@ -1139,7 +1138,7 @@ graph TD
11391138- 向后兼容性验证通过
11401139
11411140** 本阶段测试方案** :
1142- - **单元**:`OAuth2Protocol`(`authenticate`、`prepare_request`、`validate_credentials`、`discover_metadata` 在 mock 上下文下的行为,与现有 `OAuthClientProvider` 逻辑等价性如 discovery URL 顺序、token 交换参数 );`OAuthClientProvider` 包装( 对外 API 不变,内部委托 `MultiProtocolAuthProvider`+`OAuth2Protocol`, 现有 `tests/client/test_auth.py` 中所有 OAuth 相关用例仍通过) ;TokenStorage 扩展(`get_auth_credentials`/`set_auth_credentials` 与现有 `get_tokens`/`set_tokens` 的适配器行为) ;PRM 端点扩展(`create_protected_resource_routes` 传入 `auth_protocols`/`default_protocol`/`protocol_preferences` 时 PRM JSON 与 401 头包含 MCP 扩展字段) 。**集成**:再次运行 simple-auth + simple-auth-client 全流程(与阶段1相同步骤/脚本) ,确认 OAuth 仍为默认路径且行为一致;若有条件,同一 RS 同时支持 OAuth 与 API Key(或占位协议) ,客户端通过协议选择使用 OAuth,验证端到端多协议发现+OAuth 分支。**执行**:扩展现有 `tests/client/test_auth.py`,新增或扩展 `tests/server/auth/` 下 PRM/路由测试,集成继续使用 `scripts/run_phase1_oauth2_integration_test.sh` 及 `tests/PHASE1_OAUTH2_REGRESSION_TEST_PLAN.md` 检查清单。
1141+ - ** 单元** :` OAuth2Protocol ` (` authenticate ` 委托 ` OAuthClientProvider.run_authentication ` 、` prepare_request ` 、` validate_credentials ` 、` discover_metadata ` 在 mock 上下文下的行为); ` OAuthClientProvider.run_authentication ` (与现有 401 分支行为一致 );` OAuthClientProvider ` 对外 API 不变,现有 ` tests/client/test_auth.py ` 中所有 OAuth 相关用例仍通过;TokenStorage 扩展;PRM 端点扩展。** 集成** :再次运行 simple-auth + simple-auth-client 全流程,确认 OAuth 仍为默认路径且行为一致;若有条件,同一 RS 同时支持 OAuth 与 API Key,客户端通过协议选择使用 OAuth,验证端到端多协议发现+OAuth 分支。** 执行** :扩展现有 ` tests/client/test_auth.py ` ,新增或扩展 ` tests/server/auth/ ` 下 PRM/路由测试,集成继续使用 ` scripts/run_phase1_oauth2_integration_test.sh ` 及 ` tests/PHASE1_OAUTH2_REGRESSION_TEST_PLAN.md ` 检查清单。
11431142
11441143### 5.4 阶段4:可选安全增强(Week 8,可选)
11451144
@@ -1193,8 +1192,8 @@ graph TD
11931192
11941193### 6.2 API兼容
11951194
1196- - ** ` OAuthClientProvider ` 保持现有API不变**
1197- - ** 内部使用 ` OAuth2Protocol ` 和 ` MultiProtocolAuthProvider ` **
1195+ - ** ` OAuthClientProvider ` 保持现有API不变** ,并新增 ` run_authentication(http_client, ...) ` 供多协议路径调用
1196+ - ** OAuth2Protocol 为薄适配层 ** ,内部委托 ` OAuthClientProvider.run_authentication ` ,不重复实现 OAuth 流程
11981197- ** 现有代码无需修改即可工作**
11991198
12001199### 6.3 行为兼容
0 commit comments