Azure App Service中Post/Put/Patch请求授权失效问题求助
检查Azure App Service的HTTPS与Cookie安全配置
Azure默认强制HTTPS,若本地开发用HTTP,Cookie的Secure、SameSite属性可能与生产环境不匹配。确保Program.cs/Startup.cs中Cookie认证配置里:SecurePolicy设为CookieSecurePolicy.Always(适配HTTPS环境)SameSite根据部署场景调整:同域用SameSiteMode.Lax,跨域则设SameSiteMode.None(需配合Secure属性)
同时确认UseHttpsRedirection开启后,重定向过程未丢失Cookie。
验证CSRF(Antiforgery)保护逻辑
ASP.NET Core默认对非Get请求启用CSRF拦截,若前端未正确传递令牌,会导致身份验证失效:- 后端检查
AddAntiforgery配置,确认令牌的Cookie名、请求头名设置正确 - 前端需从Cookie读取
XSRF-TOKEN,并在Post/Put/Patch请求头中携带X-XSRF-TOKEN - 排查Azure代理是否修改请求头,导致令牌验证失败
- 后端检查
开启ARR会话亲和性
若App Service启用多实例,未开启ARR Affinity会导致非Get请求被路由到不同实例,Cookie无法被识别。在Azure门户的App Service「配置→常规设置」中,确认「ARR Affinity」为开启状态。查看Azure日志捕获细节
打开App Service的日志流(Log Stream),或下载应用日志,重点查看身份验证、Antiforgery中间件的Debug级日志。可在appsettings.json中调整日志级别:{ "Logging": { "LogLevel": { "Microsoft.AspNetCore.Authentication": "Debug", "Microsoft.AspNetCore.Antiforgery": "Debug" } } }从中获取Cookie验证失败的具体原因(如签名不匹配、路径/域不匹配、过期等)。
确认Cookie的路径与域配置
检查Cookie认证配置中的Cookie.Path和Cookie.Domain是否与Azure域名匹配。例如API部署在xxx.azurewebsites.net,需确保Cookie.Domain设为.azurewebsites.net或具体域名,避免Cookie因路径/域不匹配无法生效。配置ForwardedHeaders中间件
Azure App Service运行在反向代理后,若未配置ForwardedHeaders,应用会误判请求为HTTP,拒绝Secure Cookie。在Program.cs中添加:app.UseForwardedHeaders(new ForwardedHeadersOptions { ForwardedHeaders = ForwardedHeaders.XForwardedFor | ForwardedHeaders.XForwardedProto });再次验证前端Cookie传递
用浏览器开发者工具对比Get与非Get请求的Cookie头,确认身份认证Cookie(如.AspNetCore.Identity.Application)是否存在且值一致。跨域场景下,Vue的axios需配置axios.defaults.withCredentials = true,否则Cookie不会被携带到非Get请求中。
内容的提问来源于stack exchange,提问作者Anish

