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

Azure AD多租户应用个人Outlook账号获取SMTP令牌报invalid_scope错误

解决个人Outlook账号获取SMTP.Send令牌时的invalid_scope错误

问题核心在于你使用的https://outlook.office365.com/SMTP.Send作用域仅支持工作/学校类型的组织邮箱,个人Microsoft账户(Outlook.com)并不支持该单独作用域,因此会抛出invalid_scope错误。以下是具体解决方法:

1. 针对不同账户类型使用对应作用域

  • 组织邮箱(工作/学校账户):继续使用https://outlook.office365.com/SMTP.Send作用域
  • 个人Outlook账户:替换为https://outlook.office365.com/.default作用域(个人账户无法单独申请SMTP.Send权限,需使用默认全作用域集合)

2. 修改代码适配双账户类型

你可以通过捕获invalid_scope异常,或者判断账户的租户ID来切换作用域。以下是优化后的代码示例:

var tenantId = "d0748657........";
var clientId = "23a9c7a6........";
var authorityUri = $"https://login.microsoftonline.com/common";
var redirectUri = "http://localhost";

var pca = PublicClientApplicationBuilder
         .Create(clientId)
         .WithAuthority(new Uri(authorityUri))
         .WithRedirectUri(redirectUri)
         .Build();

AuthenticationResult result = null;
var accounts = await pca.GetAccountsAsync();

if (accounts.Any())
{
    var account = accounts.FirstOrDefault();
    var scopes = account.TenantId == "9188040d-6c67-4c5b-b112-36a304b66dad" 
        ? new[] { "https://outlook.office365.com/.default" } 
        : new[] { "https://outlook.office365.com/SMTP.Send" };
    
    result = await pca.AcquireTokenSilent(scopes, account).ExecuteAsync();
}
else
{
    try
    {
        // 先尝试组织邮箱作用域,失败则切换为个人账户作用域
        result = await pca.AcquireTokenInteractive(new[] { "https://outlook.office365.com/SMTP.Send" }).ExecuteAsync();
    }
    catch (MsalServiceException ex) when (ex.ErrorCode == "invalid_scope")
    {
        result = await pca.AcquireTokenInteractive(new[] { "https://outlook.office365.com/.default" }).ExecuteAsync();
    }
    catch (MsalException ex)
    {
        Console.WriteLine($"Error acquiring access token: {ex}");
    }
}

if (result != null)
{
    Console.WriteLine($"Token : {result.AccessToken}");
}

3. 确认应用权限配置

在Azure AD应用注册中,确保已添加对应权限:

  • 对于组织账户:添加Office 365 Exchange Online下的SMTP.Send委托权限,并完成管理员同意
  • 对于个人账户:添加Office 365 Exchange Online下的Exchange.Send委托权限,个人用户登录时会自动完成权限同意

内容的提问来源于stack exchange,提问作者It's Siddiqi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 11:20:53