如何从Copilot Studio Agent调用的MCP服务器获取终端用户上下文用于授权
获取Copilot用户上下文实现授权的可行方案
可行,你可以通过以下步骤实现:
配置Copilot Agent传递用户上下文
在定义Copilot Agent的工具时,开启用户身份信息传递功能:- 若使用Copilot Studio配置Agent,在工具连接的设置中勾选「传递用户身份」相关选项,确保Agent调用Azure Function时,将用户的UPN、Object ID等身份字段放入请求头部或体中。
- 若通过代码(如.NET/Java SDK)定义Agent,可从Agent的
TurnContext中提取用户身份信息,在工具调用的参数里显式添加这些上下文字段。
在Azure Function中接收并验证用户身份
在Azure Function的触发函数里,从请求头部(如X-MS-USER-ID、X-MS-USER-NAME)或请求体中获取用户身份数据,然后对接授权逻辑完成验证:- 可调用Microsoft Graph API,通过用户ID/UPN获取用户的权限信息;也可以直接与你的内部授权系统对接,确认用户是否拥有访问MCP资源的权限。
- C#示例代码:
[FunctionName("McpServerFunction")] public static async Task<IActionResult> Run( [HttpTrigger(AuthorizationLevel.Function, "post", Route = null)] HttpRequest req, ILogger log) { var userId = req.Headers["X-MS-USER-ID"].FirstOrDefault(); if (string.IsNullOrEmpty(userId)) { return new UnauthorizedResult(); } bool hasPermission = await ValidateUserPermission(userId); if (!hasPermission) { return new ForbidResult(); } // 执行MCP相关业务逻辑 // ... return new OkObjectResult("操作完成"); }
处理权限校验失败场景
若用户未通过权限验证,返回403 Forbidden或明确的错误信息,Copilot Agent会自动将该结果反馈给用户,告知其无对应访问权限。
内容的提问来源于stack exchange,提问作者wmmhihaa
相关产品推荐
相关产品推荐

