如何将 Google 的 OpenID 连接提供程序与 CORS 一起使用?

How to use Google's OpenID connect provider with CORS?

我编写了一个 JavaScript 应用程序来使用 Google 的 OpenID-Connect 提供程序进行身份验证。我已经在 Google 的开发者控制台注册了该应用程序。

我正在使用 oidc-client-js 库来处理与 Google 的交互,并将我的应用程序的 client_id 传递给配置,以便它传递给 Google 来验证我的应用程序。

我的配置:

{
  client_id: 'secret',
  redirect_uri: `${window.location.protocol}//${window.location.hostname}:${window.location.port}/callback`,
  response_type: 'token id_token',
  scope: 'openid profile',
  authority: 'https://accounts.google.com/',
  silent_redirect_uri: `${window.location.protocol}//${window.location.hostname}:${window.location.port}/silent_renew.html`,
  automaticSilentRenew: true,
  filterProtocolClaims: true,
  loadUserInfo: true
};

我的开发服务器在 https://localhost:8080 上运行(具有 self-signed 开发证书)。我已经在 Google 注册了这个 URL 和重定向 URI 作为我的应用程序的授权主机,所以 Google 知道我的开发服务器。当我尝试访问 Google 的 OpenID-Provider 时,出现以下错误:

XMLHttpRequest cannot load https://accounts.google.com/.well-known/openid-configuration. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'https://localhost:8080' is therefore not allowed access.

编辑:我已将问题缩小到 Google 的端点未在其响应中设置任何 CORS headers。如果我禁用 Chrome 的 CORS 安全设置,则身份验证有效。这无论如何都是不可取的,但这也意味着 CORS 才是真正的罪魁祸首。

有什么方法可以让我将 CORS 与 Google 的 OpenID 发现文档一起使用?我是否必须在 Google 为我的服务器注册 CORS 来源?

Google 的 OpenID 发现文档似乎不支持 CORS,因此没有 JavaScript 应用程序可以访问它(应该在 Google 方面得到修复).

为了让它与 oidc-client-js 一起工作,您必须按照 wiki.

中所述手动设置从发现文档中获取的信息

编辑 (07/20/16): 感谢 mengcheng 的回答。 Google 的发现文档现在具有完全成熟的 CORS 支持。不再需要从发现文档中手动设置信息的步骤。

Google 已更新 OpenID Connect 发现文档以支持 CORS。你能再试一次吗?