解决Angular调用Azure Log Analytics时的AADSTS9002326跨域令牌错误
针对你遇到的AADSTS9002326错误,以下是具体的排查和解决步骤:
确认Angular认证库的授权流程
确保你使用的认证库(如@azure/msal-angular)采用授权码流+PKCE,SPA应用必须使用这个流程,不能用隐式流或客户端凭证流。在MSAL配置中明确开启PKCE:MsalModule.forRoot(new PublicClientApplication({ auth: { clientId: '你的客户端ID', authority: 'https://login.microsoftonline.com/你的租户ID', redirectUri: 'http://localhost:4200' // 需与Azure AD配置完全一致 }, cache: { cacheLocation: BrowserCacheLocation.LocalStorage, storeAuthStateInCookie: false } }), { interactionType: InteractionType.Redirect, authRequest: { scopes: ['https://api.loganalytics.io/.default'] // 替换为实际需要的权限范围 } })精确匹配重定向URI
检查Azure AD中配置的SPA重定向URI和Angular应用的redirectUri是否完全一致,包括末尾的斜杠。例如Azure AD中配置http://localhost:4200,Angular里就不能写http://localhost:4200/,建议统一去掉末尾斜杠避免匹配问题。清理浏览器缓存与本地存储
浏览器缓存的旧令牌或认证会话可能导致冲突,直接清空当前浏览器的缓存、Cookie和本地存储,重启应用后重新发起认证请求。检查API权限类型
在Azure AD应用的API权限中,确保添加的是委托权限(Delegated permissions),SPA应用无法使用应用权限(Application permissions),后者仅适用于后端服务调用。排查Azure AD应用的客户端类型配置
确认Azure AD应用中没有同时配置冲突的客户端类型。如果之前添加过Web应用/API类型的重定向URI,建议暂时移除,只保留SPA类型的重定向URI,避免令牌兑换时的类型混淆。验证令牌请求参数
如果是手动调用认证API获取令牌,确保请求包含PKCE相关参数(code_challenge、code_challenge_method),且请求的是授权码流端点(/oauth2/v2.0/authorize和/oauth2/v2.0/token),不要使用客户端凭证流的端点。
内容的提问来源于stack exchange,提问作者Maxime C.

