Skip to content

Commit 6aa7e77

Browse files
committed
docs(auth): update auth-analysis and multi-protocol-refactoring-plan
1 parent 5cabe19 commit 6aa7e77

2 files changed

Lines changed: 25 additions & 23 deletions

File tree

src/mcp/client/auth/auth-analysis.md

Lines changed: 14 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1393,14 +1393,17 @@ class AuthProtocol(Protocol):
13931393
# 4. 准备请求认证信息
13941394
```
13951395

1396-
2. **OAuthClientProvider 适配**
1397-
- `OAuthClientProvider` 改为 `OAuth2Protocol` 实现
1398-
- 保持现有 API 不变(向后兼容)
1399-
- 内部使用 `MultiProtocolAuthProvider`
1396+
2. **OAuthClientProvider 保持为 OAuth 逻辑的唯一实现(最大程度复用)**
1397+
- ****将 OAuth 发现/注册/授权码/令牌交换逻辑迁出到 OAuth2Protocol
1398+
- 新增 `run_authentication(self, http_client, *, resource_metadata_url=None, scope_from_www_auth=None)`:使用 `http_client` 执行完整 OAuth 流程(PRM/ASM 发现、scope 选择、注册或 CIMD、授权码 + 令牌交换),与现有 401 分支行为一致
1399+
- 现有 `async_auth_flow` 的 401 分支保持不变;多协议路径下由 OAuth2Protocol 调用 `run_authentication(http_client)` 复用同一套逻辑
14001400

1401-
3. **OAuthContext 扩展**
1402-
- 支持多协议上下文
1403-
- 协议特定的元数据存储
1401+
3. **OAuth2Protocol 作为薄适配层**
1402+
- `OAuth2Protocol` 实现 `AuthProtocol`****重复实现 OAuth 发现/注册/编排
1403+
- `authenticate(context)`:从 `AuthContext` 与自身配置组装 OAuth 所需上下文,构造 `OAuthClientProvider`,写入已发现的 PRM、protocol_version、scope_from_www_auth 等,调用 `provider.run_authentication(context.http_client, ...)`,从 provider 的 current_tokens 转为 `OAuthCredentials` 并返回
1404+
1405+
4. **OAuthContext 扩展**
1406+
- 支持由多协议层传入已发现的 `protected_resource_metadata``protocol_version``scope_from_www_auth`(供 `run_authentication` 使用)
14041407

14051408
#### 13.2.5 请求认证信息准备
14061409

@@ -1625,8 +1628,8 @@ class AuthProtocol(Protocol):
16251628
#### 13.4.3 OAuth 协议实现
16261629

16271630
**新建文件**: `src/mcp/client/auth/protocols/oauth2.py`
1628-
- `OAuth2Protocol` 类(实现 `AuthProtocol`
1629-
- 将现有 `OAuthClientProvider` 逻辑迁移到这里
1631+
- `OAuth2Protocol` 类(实现 `AuthProtocol`**薄适配层**
1632+
- ****迁移 OAuth 逻辑到此文件;`authenticate(context)` 内构造 `OAuthClientProvider`、填充上下文后调用 `provider.run_authentication(context.http_client)`,复用现有 `oauth2.py` 实现
16301633

16311634
#### 13.4.4 服务器端验证器
16321635

@@ -1691,8 +1694,8 @@ class AuthProtocol(Protocol):
16911694
- 如果 `mcp_auth_protocols` 为空,自动从 `authorization_servers` 创建 OAuth 协议元数据
16921695

16931696
#### API 兼容
1694-
- `OAuthClientProvider` 保持现有 API 不变
1695-
- 内部使用 `OAuth2Protocol` `MultiProtocolAuthProvider`
1697+
- `OAuthClientProvider` 保持现有 API 不变,并新增 `run_authentication(http_client, ...)` 供多协议路径调用
1698+
- 多协议场景下 `OAuth2Protocol` 内部委托 `OAuthClientProvider.run_authentication`,不重复实现 OAuth 流程
16961699
- 现有代码无需修改即可工作
16971700

16981701
#### 行为兼容

src/mcp/client/auth/multi-protocol-refactoring-plan.md

Lines changed: 11 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -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

442441
3. **协议上下文扩展**
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

Comments
 (0)