如何为Azure部署的Swagger设置正确的Azure AD B2C重定向URL?
解决Swagger在Azure部署环境下的重定向URL问题
核心原因
Swagger UI 默认会使用启动时的主机地址作为OAuth2重定向URL,部署到Azure后未自动切换为云环境的URL,导致认证流程仍指向localhost。
解决方案步骤
1. 确认Azure AD B2C应用注册的重定向URL配置
在Azure AD B2C的应用注册中,必须添加部署后的Swagger重定向地址,格式为:https://<你的Azure网站域名>/swagger/oauth2-redirect.html
示例:若你的网站域名为myapp.azurewebsites.net,则重定向URL为https://myapp.azurewebsites.net/swagger/oauth2-redirect.html
2. 配置SwaggerUI使用正确的重定向URL
有两种常用方式解决动态环境的重定向URL问题:
方式一:动态获取当前环境的基础URL
先注册IHttpContextAccessor服务,再通过它获取当前请求的Scheme和Host,拼接出正确的重定向地址:
// 注册IHttpContextAccessor builder.Services.AddHttpContextAccessor(); // 配置SwaggerUI app.UseSwaggerUI(c => { c.OAuthClientId(builder.Configuration["AzureAdB2C:SwaggerClientId"]); c.OAuthScopes(builder.Configuration["AzureAdB2C:Scope"]); c.OAuthUsePkce(); // 获取当前环境的基础URL并拼接重定向路径 var httpContext = app.Services.GetRequiredService<IHttpContextAccessor>().HttpContext; var baseUrl = $"{httpContext.Request.Scheme}://{httpContext.Request.Host}"; c.OAuthRedirectUrl($"{baseUrl}/swagger/oauth2-redirect.html"); });
方式二:通过环境配置文件区分
分别在本地和生产环境的配置文件中指定对应重定向URL:
- 本地
appsettings.json:
{ "AzureAdB2C": { "SwaggerRedirectUrl": "http://localhost:5078/swagger/oauth2-redirect.html" } }
- 生产环境
appsettings.Production.json:
{ "AzureAdB2C": { "SwaggerRedirectUrl": "https://<你的Azure网站域名>/swagger/oauth2-redirect.html" } }
然后在代码中读取配置值:
app.UseSwaggerUI(c => { c.OAuthClientId(builder.Configuration["AzureAdB2C:SwaggerClientId"]); c.OAuthScopes(builder.Configuration["AzureAdB2C:Scope"]); c.OAuthUsePkce(); c.OAuthRedirectUrl(builder.Configuration["AzureAdB2C:SwaggerRedirectUrl"]); });
3. 验证配置效果
部署到Azure后,访问Swagger页面并点击认证按钮,检查地址栏的重定向地址是否已切换为Azure网站域名,确认认证流程能正常跳转回Swagger页面。
内容的提问来源于stack exchange,提问作者Anna Melashkina
相关产品推荐
相关产品推荐

