Azure AD SPA与WebAPI登录报错AADSTS65005:请求资源未在权限列表中
解决AADSTS65005: Invalid Resource错误的步骤
你遇到的这个AADSTS65005错误,本质是Azure AD认为你的SPA请求访问的WebAPI资源没有被授权给你的SPA应用,或者资源标识符配置有误。下面是具体的排查和解决步骤:
1. 确认WebAPI的资源标识符(Application ID URI)
首先得拿到WebAPI在Azure AD里的正确资源标识:
- 登录Azure门户,找到你的WebAPI对应的应用注册
- 切换到「公开API」页面,复制这里的Application ID URI——这个就是WebAPI的唯一资源标识,格式通常是
api://{webapi-client-id}或者你自定义的URI,一定要确保复制的内容完全准确,不能有拼写错误。
2. 给SPA应用配置WebAPI的访问权限
接下来要让Azure AD知道你的SPA有权访问这个WebAPI:
- 找到SPA对应的应用注册,进入「API权限」页面
- 点击「添加权限」→ 选择「我的API」,找到你的WebAPI应用
- 勾选需要的委托权限(比如常见的
user_impersonation),然后点击「添加权限」 - 如果是租户内的应用,记得点击「授予管理员同意」(需要有租户管理员权限),这样所有用户都能使用这个权限。
3. 验证SPA代码中的资源配置
回到你的AngularJS代码,确保请求token时指定的resource参数和刚才复制的WebAPI Application ID URI完全一致:
比如在ADAL的初始化配置里,要写成这样:
adalAuthenticationServiceProvider.init({ clientId: '你的SPA客户端ID', resource: 'api://12345678-1234-1234-1234-1234567890ab', // 这里要和WebAPI的Application ID URI完全匹配 // 其他配置项... }, $httpProvider);
这里最容易犯的错误是资源URI拼写错误,比如多了个斜杠、少了前缀,或者用了WebAPI的客户端ID而不是Application ID URI,一定要仔细核对。
4. 检查WebAPI的验证配置
最后要确保WebAPI本身的验证配置也正确:
在WebAPI的Startup.cs里,配置Azure AD Bearer验证时,Audience要设置为WebAPI的Application ID URI:
services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme) .AddAzureAdBearer(options => Configuration.Bind("AzureAd", options));
对应的appsettings.json配置:
"AzureAd": { "Instance": "https://login.microsoftonline.com/", "Domain": "你的租户域名.onmicrosoft.com", "TenantId": "你的租户ID", "ClientId": "你的WebAPI客户端ID", "Audience": "api://12345678-1234-1234-1234-1234567890ab" // 同样要匹配WebAPI的Application ID URI }
最后一步:清除缓存重新测试
配置完成后,记得清除浏览器的缓存,或者用隐私窗口重新登录,因为之前获取的旧token可能还是用了错误的资源,导致问题依然存在。
内容的提问来源于stack exchange,提问作者rakshith
相关产品推荐
相关产品推荐

