关于 CORS,为啥我部署的 Azure 应用程序适用于除一个用户之外的所有人?
Posted
技术标签:
【中文标题】关于 CORS,为啥我部署的 Azure 应用程序适用于除一个用户之外的所有人?【英文标题】:Why would my deployed Azure app work for everyone but one user, regarding CORS?关于 CORS,为什么我部署的 Azure 应用程序适用于除一个用户之外的所有人? 【发布时间】:2020-09-25 06:48:08 【问题描述】:我刚刚将一个新的 Web 应用、API 和 DB 部署到 Azure。作为测试,我有大约六个人使用该应用程序。它为五个人工作,但一个人得到了这个 CORS 错误:
SEC7120:[CORS] 来源“https://mysite.azurewebsites.net”没有 在中找到“https://mysite.azurewebsites.net” 跨域资源的 Access-Control-Allow-Origin 响应标头 在'https://mysiteapi.azurewebsites.net/user'。
这怎么可能?架构是这样的:
浏览器 > Azure Web 应用 > Azure API > Azure DB
CORS 问题是 Azure Web App 和 Azure API 之间的问题,对吧?那么,当 Web 应用程序和每个用户的 API 之间没有任何变化时,一个人怎么会遇到这个问题呢?
在我的 .NET Core 3.0 API 中,我有这个
app.UseCors(options => options
.WithOrigins("http://localhost:4200", "https://localhost:4200", "https://mysite.azurewebsites.net")
.AllowAnyMethod()
.WithHeaders("Authorization", "Content-Type"));
我的网络应用程序这样调用 API:
const headers_object = new HttpHeaders().set("Authorization", "Bearer " + jwt);
this.http.get('user', headers: headers_object, responseType: 'json' )
.subscribe((data: any) =>
this.userDto = data;
,
error =>
console.log('error: ', error);
);
那么它怎么可能表现得不同呢?为什么会这样?
【问题讨论】:
可能的原因包括:用户收到错误响应——5xx 或 4xx——在这种情况下,响应可能根本没有 Access-Control-Allow-Origin 响应标头;或者由于某种原因,用户根本没有收到响应——可能是因为他们有浏览器扩展程序或防病毒软件阻止了它。要进行故障排除,请考虑让用户查看浏览器 devtools 中的 Network 选项卡(最好在 Firefox 中,因为这会比在 Chrome 中显示更多信息)——查看响应的 HTTP 状态代码和完整的响应标头集。 谢谢。响应标头确实显示了相应站点的Access-Control-Allow-Origin
。另外,在 Startup.cs 中设置UseCors
应该包含所有内容的响应标头,对吗?这对浏览器扩展或防病毒很有趣。我可以检查一下。
这可能与 [***.com/a/49364050/5344880] 相关吗?从该链接中,我们可以推断您定义 URL 以允许 CORS 的方式也很重要。因此,访问带有 www 前缀和 不带 www 前缀的 URL 可能会导致不同的行为
这是个好主意,我可以看看这对我来说是否是个问题,但我认为不是。我在任何地方都使用 mysite.azurewebsites.net。而且我不确定这对一个用户来说是个什么问题。不过谢谢你的提示。
您可以将其发布为答案,以帮助遇到同样问题的其他人。
【参考方案1】:
出于某种原因,我儿子没有 Google OAuth 的“family_name”声明。这导致了异常,并且由于某种原因导致了 CORS 错误。
【讨论】:
以上是关于关于 CORS,为啥我部署的 Azure 应用程序适用于除一个用户之外的所有人?的主要内容,如果未能解决你的问题,请参考以下文章
为啥我部署的 Android 应用无法登录 Google Play 服务,而我的调试应用却可以登录?
如何将python web应用程序部署到Microsoft Azure