ASP.NET Core Web API Swagger UI OAuth2认证报AADSTS9002326错误
解决Swagger UI OAuth2授权码流程的AADSTS9002326错误
错误AADSTS9002326的核心原因是:Swagger UI运行在浏览器端,属于跨域请求场景,而你当前的Azure应用注册为Web应用类型,这类应用默认限制跨域令牌兑换(仅SPA类型原生支持)。不过可以通过调整Azure应用注册和Swagger配置来适配,无需修改应用类型,具体步骤如下:
1. 调整Azure应用注册的认证配置
- 登录Azure门户,找到目标应用注册
- 进入「认证」页面,在「Web」平台下添加Swagger UI的重定向URI:
https://app-dev-medlemssystemapi.azurewebsites.net/swagger/oauth2-redirect.html - 在「高级设置」中,将「允许公共客户端流」设置为「是」(此配置允许Web应用类型支持跨域令牌兑换,适合调试环境)
- (可选)在「跨域共享(CORS)」中添加Swagger UI的域名:
https://app-dev-medlemssystemapi.azurewebsites.net
2. 更新Swagger的OAuth2配置(推荐使用PKCE模式)
浏览器端的Swagger UI无法安全存储客户端密钥,因此建议改用PKCE(授权码流程的增强模式),修改program.cs中的配置:
builder.Services.AddSwaggerGen(c => { // 原有文档配置... c.AddSecurityDefinition("oauth2", new OpenApiSecurityScheme { Type = SecuritySchemeType.OAuth2, Flows = new OpenApiOAuthFlows { AuthorizationCode = new OpenApiOAuthFlow { AuthorizationUrl = new Uri("https://login.microsoftonline.com/{你的租户ID}/oauth2/v2.0/authorize"), TokenUrl = new Uri("https://login.microsoftonline.com/{你的租户ID}/oauth2/v2.0/token"), Scopes = new Dictionary<string, string> { { "api://{你的客户端ID}/access_as_user", "以用户身份访问API" } }, UsePkce = true // 启用PKCE } } }); // 原有安全要求配置... }); app.UseSwaggerUI(c => { c.OAuthClientId("{你的客户端ID}"); // 移除客户端密钥配置,PKCE不需要 // c.OAuthClientSecret("{你的客户端密钥}"); c.OAuthScopes("api://{你的客户端ID}/access_as_user"); c.OAuthUsePkce(); // 开启PKCE支持 });
3. 如果需要保留客户端密钥(仅调试场景)
若必须使用客户端密钥,除了上述Azure应用注册的「允许公共客户端流」设置外,确保Swagger UI的重定向URI已正确配置,且CORS规则包含Swagger域名。但此方式安全性较低,不建议用于生产环境。
完成上述配置后,Swagger UI的OAuth2授权码流程即可正常完成认证。
内容的提问来源于stack exchange,提问作者Osman Esen
相关产品推荐
相关产品推荐

