You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Microsoft Graph应用权限被识别为委派权限,无法代其他用户发邮件

问题解答

核心结论

  • 通过用户交互流程生成的访问令牌仅适用于委派(Delegated)权限,无法使用应用(Application)权限。要实现以任意指定用户身份发送邮件,必须使用守护程序专属的客户端凭证流获取应用权限令牌。

具体问题分析与解决步骤

  1. 权限配置问题排查
    你提到配置了Mail.Send + offline_access作为Application权限,但Entra管理中心显示为Delegated权限,这说明权限配置环节有误:

    • 应用注册的API权限分为「委派权限」和「应用权限」两类,需确保是在「应用权限」下添加的Mail.Send(注意:offline_access只有委派权限版本,应用权限不需要这个权限)。
    • 管理员同意时,要选择对应「应用权限」的「授予管理员同意」操作,而非委派权限的同意。
  2. 令牌类型与权限的对应关系

    • 从用户视角生成的令牌(比如授权码流、密码流获取的令牌)属于委派令牌,令牌中包含用户身份信息,仅能以该用户的身份执行操作,所以你只能用它给自己发邮件,替其他用户发送就会触发Forbidden错误。
    • 应用权限对应的是客户端凭证令牌,这类令牌由应用本身的身份(客户端ID+密钥/证书)获取,不关联具体用户,只要已授予应用级别的Mail.Send权限,就能以任意指定用户身份发送邮件。
  3. 守护程序服务的令牌获取流程
    使用客户端凭证流获取令牌,流程如下:

    • 确保应用已添加Mail.Send应用权限,并完成组织范围的管理员同意。
    • 使用应用的客户端ID、客户端密钥(或证书),向Microsoft身份平台的令牌端点发送请求:
      POST https://login.microsoftonline.com/{租户ID}/oauth2/v2.0/token
      Content-Type: application/x-www-form-urlencoded
      
      grant_type=client_credentials
      &client_id={你的客户端ID}
      &client_secret={你的客户端密钥}
      &scope=https://graph.microsoft.com/.default
      
    • 获取到令牌后,调用Graph API发送邮件时,在请求中指定目标用户的邮箱或ID即可:
      POST https://graph.microsoft.com/v1.0/users/{目标用户ID}/sendMail
      Authorization: Bearer {应用权限令牌}
      Content-Type: application/json
      
      {
        "message": {
          "subject": "测试邮件",
          "body": {
            "contentType": "Text",
            "content": "这是通过应用权限发送的测试邮件"
          },
          "toRecipients": [
            {
              "emailAddress": {
                "address": "收件人邮箱"
              }
            }
          ]
        },
        "saveToSentItems": "false"
      }
      

内容的提问来源于stack exchange,提问作者Jens

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 20:43:37