为何需同时在Startup.cs与Azure门户配置CORS以面向所有用户?
为什么要同时在Startup.cs和Azure门户配置CORS?
两者作用层级不同
Startup.cs里的CORS配置是ASP.NET Core应用自身的校验逻辑,负责拦截应用直接接收的跨域请求;而Azure门户的配置是Azure托管服务(比如App Service)前端网关的前置校验,请求会先经过网关再转发到应用,任意一层没放行都会导致访问失败。只配Startup.cs的问题
如果Azure网关的CORS列表没添加允许的请求源,网关会直接拦截跨域请求并返回403,请求根本到不了你的应用代码,用户自然无法正常访问服务。只配Azure门户的问题
网关放行了请求,但应用内的CORS中间件会再次校验请求源,要是Startup.cs里没配置对应的允许源,应用还是会拒绝请求并返回403。额外注意事项
要是你的应用没启用CORS中间件,可能只配Azure门户就能正常用,但只要代码里加了app.UseCors()这类启用中间件的逻辑,就必须让两边的允许源保持一致,不然总有一层会拦截请求。另外,OPTIONS预检请求有时会被Azure网关直接处理,这时候网关的配置必须正确,否则预检都通不过,后续请求也无法发送。
内容的提问来源于stack exchange,提问作者Mafyou
相关产品推荐
相关产品推荐

