ASP.NET Core Web App调用Microsoft Graph时个人中心用户Claims缺失
问题解决思路
1. 权限范围配置错误(核心原因)
当前appsettings.json中DownstreamApi:Scopes仅配置了openid profile,这两个是用于身份验证的ID Token范围,不包含调用Microsoft Graph获取用户信息的权限。需要添加User.Read委托权限:
"DownstreamApi": { "BaseUrl": "https://graph.microsoft.com/v1.0", "Scopes": "openid profile User.Read" }
2. 在Azure AD门户配置并授予权限
- 登录Azure AD门户,找到你的单租户应用注册
- 进入API权限页面,点击添加权限,选择Microsoft Graph → 委托权限,搜索并添加
User.Read权限 - 点击授予管理员同意(单租户环境下,管理员同意后所有用户均可使用该权限)
3. 验证Token与API调用
重启应用后重新登录,此时获取的Access Token会包含User.Read权限,调用_graphServiceClient.Me.Request().GetAsync()即可成功获取用户信息(包括显示名称、邮箱、头像等)。
4. 可选:直接从ID Token读取Claims(无需调用Graph API)
如果不需要额外的用户信息,可直接从已登录用户的Claims中提取数据,无需调用Graph,示例代码:
// 在HomeController.Profile方法中 var displayName = User.Claims.FirstOrDefault(c => c.Type == "name")?.Value; var email = User.Claims.FirstOrDefault(c => c.Type == "preferred_username")?.Value; var avatarUrl = User.Claims.FirstOrDefault(c => c.Type == "picture")?.Value;
内容的提问来源于stack exchange,提问作者user20207
相关产品推荐
相关产品推荐

