ReactJS应用调用Graph API读写Azure B2C用户信息遇401问题咨询
需求可行性与401错误解决方案
需求可行性
完全可行。Azure B2C支持通过Microsoft Graph API读写用户数据,只要配置正确的应用权限并获取到符合要求的访问令牌即可实现。
401错误原因及修复步骤
你遇到的Access token validation failure. Invalid audience错误,核心是使用的令牌不符合Microsoft Graph API的要求,具体问题和修复如下:
1. 错误使用ID令牌而非访问令牌
代码中你用了response.idToken,但ID令牌(idToken)仅用于验证用户身份,不能用来调用受保护的API。调用Microsoft Graph必须使用访问令牌(accessToken),它的受众(aud字段)才是目标API的合法地址。
2. 请求的权限范围(scopes)不完整
你只请求了offline_access,没有包含Microsoft Graph的具体权限范围(比如读取用户资料的User.Read)。缺少这些权限,获取到的令牌无法被Graph API识别。
3. 调用了已弃用的API端点
你调用的https://graph.windows.net/v1.0/me是旧版Azure AD Graph的端点,目前已被弃用,应使用新版Microsoft Graph的端点https://graph.microsoft.com/v1.0/me。
修改后的代码示例
function requestProfile() { instance.acquireTokenSilent({ // 根据需求添加Microsoft Graph的权限范围 scopes: ["User.Read", "offline_access"], account: accounts[0] }).then((response) => { // 使用accessToken而非idToken const token = response.accessToken; console.log(token); // 调用新版Microsoft Graph端点 callMsGraph(token, "GET", "https://graph.microsoft.com/v1.0/me").then(response => { setGraphData(response.data); console.log(response.data); }); }); }
额外配置要求
在Azure门户的B2C应用注册中,你需要:
- 进入API权限页面,添加
Microsoft Graph的委托权限(比如User.Read、User.ReadWrite等,根据读写需求选择) - 点击授予管理员同意,确保权限生效
内容的提问来源于stack exchange,提问作者Matthew
相关产品推荐
相关产品推荐

