.NET 6 Blazor部署Azure后点击登录触发DenyAnonymous授权失败,本地正常
以下是针对该问题的排查和解决方向:
检查Azure App Service内置身份验证(Easy Auth)冲突
Azure App Service默认启用的Easy Auth常和应用内的IdentityServerJwt配置冲突。进入Azure门户你的App Service,找到「身份验证」选项,查看是否启用了非应用自身配置的身份提供者,若有则暂时禁用后重新部署测试。修正JWT配置的Authority地址
本地运行时Authority可能指向localhost,部署到Azure后必须更新为IdentityServer的公网HTTPS地址。检查appsettings.json或Azure应用配置中的Authority值,确保为正确的公网地址,比如"https://your-identity-server.azurewebsites.net",同时在代码中显式指定配置:builder.Services.AddAuthentication() .AddIdentityServerJwt(options => { options.Authority = builder.Configuration["IdentityServer:Authority"]; options.RequireHttpsMetadata = true; // Azure环境必须开启HTTPS验证 });确认登录页面未被错误授权
检查登录页面(如Login.razor)是否意外添加了@attribute [Authorize]属性,或者路由配置中对登录路径设置了授权要求。未登录用户访问登录页面时若被要求授权,会直接触发该错误。强制Azure App Service使用HTTPS
IdentityServerJwt默认要求HTTPS元数据,进入Azure门户App Service的「TLS/SSL设置」,开启「HTTPS 仅」选项,确保所有请求通过HTTPS访问,避免元数据请求失败导致的验证问题。验证中间件顺序是否正确
确保UseAuthentication()和UseAuthorization()的调用顺序正确,必须先执行认证再执行授权,且放在路由中间件之前:app.UseHttpsRedirection(); app.UseStaticFiles(); app.UseRouting(); app.UseAuthentication(); // 先执行认证 app.UseAuthorization(); // 再执行授权 app.MapBlazorHub(); app.MapFallbackToPage("/_Host");
内容的提问来源于stack exchange,提问作者Kirby Kernen

