使用Azure Graph API发邮件遇InvalidAuthenticationToken错误求助
解决Azure Graph API邮件发送的InvalidAuthenticationToken错误
核心问题定位
你遇到的InvalidAuthenticationToken(访问令牌为空)错误,核心是两个关键问题导致:
- redirect_uri配置错误:你把回调地址设为
https://graph.microsoft.com/v1.0/oauth2PermissionGrants,这是Graph API的权限管理端点,并非你的应用接收授权码的回调地址。 - 授权流程未走完:仅发起授权请求不足以获取令牌,还需完成“用授权码换取访问令牌”的步骤,否则调用邮件接口时无法携带有效令牌。
具体解决步骤
1. 修正redirect_uri配置
- 登录Azure门户,找到你的应用注册,进入身份验证页面。
- 添加属于你自身应用的回调地址(比如本地开发用
http://localhost:3000/callback,生产环境用你的应用域名地址),确保地址可访问,用于接收授权码。 - 授权请求中的
redirect_uri参数必须和这里配置的地址完全一致,不能再使用Graph API的端点。
2. 完成完整授权码流程
步骤1:获取授权码
构造正确的授权请求URL,替换为你的有效值后引导用户访问:
https://login.microsoftonline.com/common/oauth2/v2.0/authorize?client_id=你的客户端ID&response_type=code&redirect_uri=你配置的回调地址&scope=Mail.Send offline_access&response_mode=query&state=12345
用户登录并授权后,会跳转到你设置的回调地址,URL中会携带code参数(授权码)。
步骤2:用授权码换取访问令牌
向令牌端点发送POST请求,参数采用application/x-www-form-urlencoded格式:
POST https://login.microsoftonline.com/common/oauth2/v2.0/token Content-Type: application/x-www-form-urlencoded client_id=你的客户端ID &client_secret=你的客户端密钥(仅机密客户端需要) &code=步骤1中获取的授权码 &redirect_uri=你配置的回调地址 &grant_type=authorization_code &scope=Mail.Send
成功响应会包含access_token(访问令牌)、refresh_token(刷新令牌,可选)等字段。
步骤3:使用令牌调用邮件接口
调用Graph API发送邮件时,必须在请求头中携带访问令牌:
POST https://graph.microsoft.com/v1.0/me/sendMail Authorization: Bearer 你的access_token Content-Type: application/json { "message": { "subject": "测试邮件", "body": { "contentType": "Text", "content": "这是测试内容" }, "toRecipients": [ { "emailAddress": { "address": "收件人邮箱" } } ] }, "saveToSentItems": "true" }
3. 额外检查项
- 确保你的应用注册中已添加Mail.Send的委托权限,且完成授权(管理员同意或用户自主授权)。
- 检查令牌有效期,过期后可使用
refresh_token重新获取新的access_token。
内容的提问来源于stack exchange,提问作者Hemavathi Gadi
相关产品推荐
相关产品推荐

