Azure AD与Dynamics 365 F&O API令牌获取:Scope参数格式错误求助
解决Dynamics 365 Finance and Operations Web API获取Access Token时的Scope错误(AADSTS70011)
我来帮你搞定这个Scope报错的问题,这个坑我之前对接D365 F&O API的时候也踩过!
问题根源先理清楚
你遇到的AADSTS70011错误,本质上有两个核心问题:
- Scope格式不符合Azure AD的要求:单纯的根资源URI(比如你用的
https://api.financials.dynamics.com/)是不被认可的,Azure AD要求Scope要么是带权限后缀的完整资源地址,要么是特定的权限标识符。 - 资源地址搞混了:
https://api.financials.dynamics.com/其实是Dynamics 365 Business Central的API端点,而你要对接的Finance and Operations(F&O)的Web API,对应的资源地址是你的具体F&O实例URL(比如https://yourorgname.sandbox.operations.dynamics.com/),这俩可不是一回事!
给你正确的Scope配置方案
因为你用的是授权码(Authorization Code)模式(属于用户委托权限流),我给你两种实用的Scope配置选项:
选项1:用默认权限范围(简单省事)
如果你不需要精细控制权限,直接用你的F&O实例URL加上.default后缀就行,这个格式会让Azure AD授予你在应用注册里配置的所有委托权限:
https://<你的F&O实例URL>/.default
举个例子,如果你的F&O实例地址是https://contoso.sandbox.operations.dynamics.com,那Scope就写:
https://contoso.sandbox.operations.dynamics.com/.default
选项2:用具体权限(精细管控)
如果你需要指定具体的访问权限(比如只读、读写),可以用F&O对应的权限标识符,格式是:
https://<你的F&O实例URL>/<权限名称>
常用的F&O Web API权限有这些:
Financials.Read.All:只读访问F&O数据Financials.ReadWrite.All:读写访问F&O数据Financials.Manage.All:完全管理权限
示例:
https://contoso.sandbox.operations.dynamics.com/Financials.ReadWrite.All
关键注意事项要记牢
- 替换成你自己的实例URL:一定要用你实际的F&O实例地址,别再用
api.financials.dynamics.com了!你可以在F&O门户的「关于」页面找到这个地址。 - 别编码Scope:Postman里直接写原始的URI就行,不用做URL编码(比如别写
https%3A%2F%2Fxxx,直接写https://xxx/.default)。 - 检查应用注册的权限:确保你在Azure AD里注册的应用已经添加了Dynamics 365 Finance的委托权限,而且已经完成管理员同意(如果是需要管理员授权的权限)。
Postman里调整配置的步骤
- 打开Postman的授权配置面板,找到
Scope字段。 - 删除原来的编码值,替换成上面的正确Scope(比如
https://你的F&O实例URL/.default)。 - 确认你的
Auth URL和Access Token URL是对的(你现在的配置没问题,不用改):- Auth URL:
https://login.microsoftonline.com/coromed.onmicrosoft.com/oauth2/v2.0/authorize - Access Token URL:
https://login.microsoftonline.com/coromed.onmicrosoft.com/oauth2/v2.0/token
- Auth URL:
- 重新发起授权请求,应该就能顺利拿到Access Token了!
额外排查点
如果还是报错,先检查这两点:
- 应用注册里是不是已经添加了Dynamics 365 Finance的API权限,而且权限状态是「已同意」(管理员同意)。
- 你的F&O实例URL是不是正确,能不能在浏览器里正常访问。
内容的提问来源于stack exchange,提问作者Divya Bhaloidiya
相关产品推荐
相关产品推荐

