MCP认证功能应用

一个实现了安全模型上下文协议(MCP)后端服务的Azure函数应用,提供通过Azure API管理(APIM)对Microsoft Graph API的认证访问,并支持OAuth On-Behalf-Of(OBO)令牌交换。

  • by gangularamya
  • PowerShell
  • 本地部署
  • 更新于
在 GitHub 查看 gangularamya/MCPAuthFuncapp

使用说明

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策略处理的自动令牌验证和刷新

可用端点

  1. /hello -简单问候端点

    • 返回个性化问候信息
    • 支持查询参数和JSON正文输入
  2. /echo -请求回声服务

    • 返回发送的确切请求正文
    • 可用于测试和调试
  3. /tools -MCP工具发现

    • 返回可用工具及其模式
    • 支持模型上下文协议标准
  4. /me -用户配置文件检索

    • 需要认证:授权标头中的承载令牌
    • 从Microsoft Graph API检索经过身份验证的用户配置文件
    • 通过APIM OBO流程自动进行代币交换
  5. /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

部署

  1. 部署Azure功能应用程序
  2. 使用包含的策略文件配置APIM
  3. 用实际值更新策略占位符
  4. 配置OAuth应用程序注册和权限

MCP集成

此服务旨在作为模型上下文协议实现的后端,提供:

  • 经过身份验证的Microsoft Graph API访问
  • 工具发现和执行
  • 安全的用户上下文管理

安全说明

⚠️ 重要:

  • 永远不要将实际的秘密、ID或令牌提交给版本控制
  • 使用Azure密钥库进行生产秘密管理
  • 定期轮换客户端机密并审查OAuth权限
  • 监控APIM分析以发现异常访问模式