创建Microsoft Graph订阅报错:通知端点需响应200 OK验证请求
Microsoft Graph 订阅验证流程与问题解决
完整验证流程
当你调用Microsoft Graph创建订阅的API后,会触发以下验证步骤:
- Graph服务立即向你指定的
notificationUrl发送GET请求,请求URL中携带validationtoken查询参数 - 你的端点必须在10秒内返回
200 OK状态码,且响应体为纯文本格式的validationtoken参数值,不能包含任何额外内容(如HTML、JSON结构) - Graph确认收到正确响应后,才会完成订阅创建;若未收到符合要求的响应,就会返回你遇到的验证失败错误
端点处理核心要求
- 必须支持GET请求(POST请求是后续接收通知用的,验证阶段只用GET)
- 响应头
Content-Type需设置为text/plain - 响应体严格等于请求中的
validationtoken值,不能添加引号、空格或其他字符 - 确保端点可被公网访问(本地测试可使用内网穿透工具,如ngrok)
示例端点代码(Python Flask)
from flask import Flask, request, Response app = Flask(__name__) @app.route('/notification-endpoint', methods=['GET', 'POST']) def handle_notification(): # 处理验证请求 if request.method == 'GET': validation_token = request.args.get('validationtoken') if validation_token: return Response(validation_token, mimetype='text/plain', status=200) return Response('Missing validation token', status=400) # 处理后续通知(POST请求) elif request.method == 'POST': # 此处编写处理通知内容的逻辑 print(request.get_json()) return Response(status=202) if __name__ == '__main__': app.run(host='0.0.0.0', port=5000)
常见排查要点
- 验证端点公网可达性:用curl或浏览器访问
notificationUrl,确认能正常响应 - 检查GET请求处理逻辑:是否正确提取
validationtoken,有没有返回多余内容 - 控制响应时间:确保验证逻辑足够简洁,响应不超过10秒
- 确认权限配置:检查Mail.Read/Mail.ReadWrite权限是否已正确授予(委派权限需用户同意,应用权限需管理员同意)
- 核对订阅请求参数:比如
resource是否为users/{user-id}/mailFolders('Inbox')/messages,changeType是否包含所需类型(如created,updated)
内容的提问来源于stack exchange,提问作者Adithya Narayanan
相关产品推荐
相关产品推荐

