使用Graph API GetAccessTokenForUserAsync时权限请求异常问题咨询
问题:请求UserRead权限却出现额外权限授权提示
我尝试使用Graph API创建团队并添加用户,但在获取访问令牌时遇到问题。我的代码如下:
scopes = new[] { GraphConstants.UserRead }; await _tokenAcquisition.GetAccessTokenForUserAsync(scopes);
首次登录后,授权界面显示要求读取和写入组、读取和写入所有用户配置文件等权限,但我仅请求了UserRead权限,且Azure应用已配置为仅包含UserRead权限。
原因分析
- 遗留权限配置:若应用曾被授予过其他权限(比如管理员同意过更高权限),或应用Manifest中存在未清理的权限条目,会导致授权界面显示多余权限。
- TokenAcquisition默认行为:部分场景下,
GetAccessTokenForUserAsync会自动包含应用注册中所有已存在的委派权限,即便代码仅指定UserRead。 - 示例配置残留:参考的示例项目可能默认配置了额外权限,若直接复用配置文件(如
appsettings.json),会带入未清理的权限设置。
解决步骤
检查应用Manifest:
登录Azure门户进入应用注册,点击「Manifest」,找到requiredResourceAccess节点,确认仅保留UserRead对应的权限配置,删除其他多余条目。清理已授予的权限:
在应用注册的「API权限」页面,点击「授予管理员同意」旁的「...」,选择「撤销同意」,重新配置仅UserRead权限并按需授予同意。明确指定作用域:
代码中直接写死作用域字符串,避免依赖可能带多余配置的常量:var scopes = new[] { "https://graph.microsoft.com/User.Read" }; await _tokenAcquisition.GetAccessTokenForUserAsync(scopes);清理用户端授权记录:
用户访问个人账号中心,进入「安全信息」→「权限」,找到该应用并撤销已授权权限,重新登录测试。
内容的提问来源于stack exchange,提问作者eloew
相关产品推荐
相关产品推荐

