MCPAuthFuncapp
概述
此Azure功能应用程序通过Azure Active Directory身份验证实现了安全的模型上下文协议(MCP)后端服务。它通过Azure API管理(APIM)提供对Microsoft Graph API的身份验证访问,并支持OAuth On-Behalf-Of(OBO)令牌交换。
建筑
[Client App] → [APIM Gateway] → [Azure Functions] → [Microsoft Graph API]
↓ ↓ ↓ ↓
Bearer Token → OBO Exchange → Graph Token → User Data特性
认证流程
- OAuth 2.0代表流:APIM策略自动将用户承载令牌交换为Microsoft Graph API访问令牌
- Azure AD集成:使用Azure Active Directory进行无缝身份验证
- 令牌验证:APIM策略处理的自动令牌验证和刷新
可用端点
/hello-简单问候端点
- 返回个性化问候信息 - 支持查询参数和JSON正文输入
/echo-请求回声服务
- 返回发送的确切请求正文 - 可用于测试和调试
/tools-MCP工具发现
- 返回可用工具及其模式 - 支持模型上下文协议标准
/me-用户配置文件检索
- 需要认证:授权标头中的承载令牌 - 从Microsoft Graph API检索经过身份验证的用户配置文件 - 通过APIM OBO流程自动进行代币交换
/status-健康检查端点
- 服务状态和身份验证状态 - 返回用户上下文信息
安全特性
- 基于令牌的身份验证:所有敏感端点都需要有效的Bearer令牌
- APIM策略保护:OAuth策略可防止未经授权的访问
- 预先授权的应用程序:为受信任的应用程序配置OAuth同意
- 安全令牌交换:代表流维护安全边界
APIM政策
所包含的APIM政策规定:
- OAuth身份验证:验证传入的不记名令牌
- 代币交换:用于Microsoft Graph访问的自动OBO流
- 错误处理:对身份验证失败的全面错误响应
- 安全标头:正确的CORS和安全标头
配置
环境变量(替换占位符)
{{CLIENT_ID_PLACEHOLDER}}-Azure AD应用程序ID{{CLIENT_SECRET_PLACEHOLDER}}-Azure AD客户端密码{{TENANT_ID_PLACEHOLDER}}-Azure AD租户ID{{APIM_GATEWAY_URL}}-APIM网关URL
预先授权的应用程序
配置于 preauth.json 用于绕过OAuth同意(出于安全考虑,从存储库中排除)。
发展
先决条件
- Python 3.9+
- Azure功能核心工具
- Azure命令行界面
- 有效的Azure AD应用程序注册
本地开发
# Install dependencies
pip install -r requirements.txt
# Start local development server
func start部署
- 部署Azure功能应用程序
- 使用包含的策略文件配置APIM
- 用实际值更新策略占位符
- 配置OAuth应用程序注册和权限
MCP集成
此服务旨在作为模型上下文协议实现的后端,提供:
- 经过身份验证的Microsoft Graph API访问
- 工具发现和执行
- 安全的用户上下文管理
安全说明
⚠️ 重要:
- 永远不要将实际的秘密、ID或令牌提交给版本控制
- 使用Azure密钥库进行生产秘密管理
- 定期轮换客户端机密并审查OAuth权限
- 监控APIM分析以发现异常访问模式
