基于ASP.NET Core 8的应用无法通过Swagger登录Azure AD
解决Swagger UI登录Azure AD时redirect_uri无效的问题
1. 配置SwaggerUI的OAuth回调地址
你的启动代码仅配置了SwaggerGen的安全定义,但SwaggerUI本身必须指定认证后的回调URI,该地址需与Azure应用注册中的重定向URI完全匹配。
修改UseSwaggerUI的配置,补充OAuth相关设置:
app.UseSwaggerUI(c => { c.SwaggerEndpoint("/swagger/v1/swagger.json", "Commerce.API v1"); // 添加OAuth核心配置 c.OAuthClientId(builder.Configuration["AzureAd:ClientId"]); c.OAuthAppName("Commerce.API Swagger"); // 关键:替换为你的API实际HTTPS地址(比如localhost:7045) c.OAuthRedirectUrl("https://localhost:xxxx/swagger/oauth2-redirect.html"); c.OAuthUseImplicitFlow(); });
2. 在Azure应用注册中添加对应重定向URI
登录Azure门户操作:
- 找到你的应用注册,进入「身份验证」页面
- 添加**单页应用(SPA)**类型的重定向URI:
https://localhost:xxxx/swagger/oauth2-redirect.html(与上面SwaggerUI配置的地址完全一致) - 同时确认已包含API自身的OIDC回调地址
/signin-oidc(对应appsettings里的CallbackPath) - 保存更改
3. 修正SwaggerGen中的OAuth端点配置
当前代码里的TokenUrl存在路径错误,且AuthorizationUrl/TokenUrl应与appsettings里的指定租户统一,避免冲突:
AuthorizationUrl = new Uri($"https://login.microsoftonline.com/{builder.Configuration["AzureAd:TenantId"]}/oauth2/v2.0/authorize"), TokenUrl = new Uri($"https://login.microsoftonline.com/{builder.Configuration["AzureAd:TenantId"]}/oauth2/v2.0/token"),
4. 验证权限范围一致性
确保Azure应用注册中已暴露access_as_user这个API权限,且Swagger配置的Scopes与该权限名称完全匹配。
内容的提问来源于stack exchange,提问作者mariocatch
相关产品推荐
相关产品推荐

