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

WPF应用序列化Microsoft Graph令牌遇AADSTS650057错误

问题分析与解决

核心问题原因

你遇到的AADSTS650057错误,根源是权限范围与认证流不匹配:

  • 你使用的https://graph.microsoft.com/.default是应用权限(客户端凭据流)专用范围,而InteractiveBrowserCredential属于用户委托的授权码流,两种流的权限体系不兼容。
  • 同时你调用AuthenticateAsync()时未传入指定scopes,导致认证请求默认使用了不符合应用注册配置的资源。

具体修复步骤

1. 替换权限范围

将原有的.default范围替换为具体的委托权限范围,示例:

private readonly string[] _scopes = new[] { "User.Read", "Files.ReadWrite.All", "offline_access" };

注意:offline_access是获取刷新令牌的必需范围,必须包含,才能支持下次启动静默刷新令牌。

2. 修正认证调用

调用AuthenticateAsync时必须传入scopes,确保请求资源与应用注册权限匹配:

AuthenticationRecord authRecord = await interactiveCredential.AuthenticateAsync(_scopes);

using (var authRecordStream = new FileStream(AUTH_RECORD_PATH, FileMode.Create, FileAccess.Write))
{
    await authRecord.SerializeAsync(authRecordStream);
}

3. 验证应用注册权限配置

  • 登录Azure门户进入你的应用注册,转到API权限页面。
  • 确保添加的是委托权限(而非应用权限),比如Files.ReadWrite.All(委托类型)、User.Read等。
  • 对需要管理员同意的权限(如Files.ReadWrite.All),点击授予管理员同意按钮,确保权限生效。

4. 清理旧缓存(可选)

如果之前的错误缓存残留导致问题,可删除tokencache.bin文件,以及TokenCachePersistenceOptions指定的缓存文件,重新发起认证。

额外说明

  • TokenCachePersistenceOptions已自动持久化令牌缓存,你序列化AuthenticationRecord是为了下次启动时直接用它初始化凭据(比如InteractiveBrowserCredential构造函数可传入AuthenticationRecord),避免重复登录。
  • 下次启动初始化示例:
AuthenticationRecord authRecord = null;
if (File.Exists(AUTH_RECORD_PATH))
{
    using (var stream = new FileStream(AUTH_RECORD_PATH, FileMode.Open))
    {
        authRecord = await AuthenticationRecord.DeserializeAsync(stream);
    }
}

var credential = new InteractiveBrowserCredential(_options, authRecord);
// 后续可直接调用GetTokenAsync或Graph API

内容的提问来源于stack exchange,提问作者Daniel W.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 22:46:06