Azure AD用户登录应用注册触发管理员同意错误AADSTS90094原因排查
问题根因
你遇到的错误完全由{client-id}/.default这个特殊scope的设计逻辑导致:
.default是Azure AD预留的系统级scope,设计上不支持普通用户的动态同意流程,仅适用于两种场景:客户端凭据流(纯应用权限场景)、管理员已预先完成租户级全权限同意的委托场景。当新用户访问带.default的授权链接时,Azure AD会直接校验是否已有预先的同意记录,没有的话就会强制拉起管理员同意流程,普通用户没有权限就会返回AADSTS90094错误。- 额外可排查点:检查你的App Registration「API权限」面板是否配置了任意应用程序权限(和委托权限平级的另一类权限)。
.default会自动把你预先配置的所有权限(包括应用权限)都加入授权请求,而应用权限本身就只能由管理员同意,哪怕你只加了一个极低权限的应用权限,也会触发这个错误。 - 你自定义的
testscope是显式配置了允许普通用户同意的委托权限,当你在授权链接里显式指定这个scope时,Azure AD会走正常的用户动态同意流程,不会触发管理员同意限制,所以新用户可以正常访问。
常见疑问补充
你用老用户测试两种scope都能拿到token,是因为老用户已经完成过权限同意,不受新用户的同意逻辑限制。JWT里scp字段的差异只是最终授权的权限列表,和触发错误的同意流程逻辑没有直接关联。
解决方案
- 优先方案:放弃使用
.default,直接在scope参数里显式列出所有你需要的权限即可,比如scope=b2cd30fe-8109-4d71-afc7-e5bc2e468a69/test User.Read,既可以覆盖你需要的所有权限,也支持新用户自主同意。 - 如果必须使用
.default,只需让租户管理员访问一次你的授权链接,完成租户级的管理员同意,之后所有普通用户访问都不会再触发该错误。
内容的提问来源于stack exchange,提问作者NotFound
相关产品推荐
相关产品推荐

