调用Access Token API时scope参数无效的问题求助
解决方案:AADSTS70011 无效Scope错误排查
核心原因
Token请求中的scope参数被错误传入URL编码后的字符串(如user.read%20mail.read),Azure AD的token端点无法识别这种编码格式的分隔符。
具体排查步骤
修正Scope参数格式
在POST请求的表单数据中,scope需使用未编码的空格或+分隔权限,禁止传入URL编码后的%20。示例C#代码:var formData = new Dictionary<string, string> { ["client_id"] = "你的客户端ID", ["scope"] = "offline_access user.read mail.read", // 直接用空格分隔权限 ["code"] = "获取到的授权Code", ["redirect_uri"] = "http://localhost:63135/Account/MicrosoftCode", ["grant_type"] = "authorization_code", ["client_secret"] = "你的客户端密钥" // 机密客户端需添加该参数 }; var content = new FormUrlEncodedContent(formData); var response = await new HttpClient().PostAsync("https://login.microsoftonline.com/common/oauth2/v2.0/token", content);避免双重编码
不要手动对scope字符串做URL编码(如HttpUtility.UrlEncode),FormUrlEncodedContent会自动处理参数编码,手动编码会导致%20被二次编码,引发识别错误。确认Content-Type头
确保请求的Content-Type为application/x-www-form-urlencoded,FormUrlEncodedContent会自动设置该头,不要手动修改为其他类型。核对权限配置
虽然Postman可正常运行,仍需确认Azure AD应用中已添加User.Read、Mail.Read权限,且已完成对应同意流程(委托权限需用户同意,应用权限需管理员同意)。
内容的提问来源于stack exchange,提问作者Vishal Kiri
相关产品推荐
相关产品推荐

