关于 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 服务,而我的调试应用却可以登录?

Azure 函数 - 当前 Azure 资源名称

如何将python web应用程序部署到Microsoft Azure

为啥 Flask-Cors 在生产中没有检测到我的跨域域?

当我部署我的网站时,客户端发布/获取被 CORS 阻止的请求

哪些 Azure SQL 产品允许我部署 SSIS 包?