如何使用谷歌的OpenID连接提供商和CORS?

时间:2016-05-28 10:05:02

标签: cors google-signin google-authentication openid-connect google-openid

我已经编写了一个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上运行(带有自签名开发证书)。我已注册此网址&将Google上的URI重定向为我的应用的授权主机,因此Google了解我的开发服务器。当我尝试访问Google的OpenID-Provider时,出现以下错误:

  

XMLHttpRequest无法加载https://accounts.google.com/.well-known/openid-configuration。 No' Access-Control-Allow-Origin'标头出现在请求的资源上。起源' https://localhost:8080'因此不允许访问。

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

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

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:1)

Google的OpenID发现文档似乎没有CORS支持,因此没有任何JavaScript应用可以访问它(这应该可以在谷歌方面修复)。

为了使其与oidc-client-js一起使用,您必须按照wiki中的说明手动设置从发现文档中获取的信息。

编辑(07/20/16): 感谢蒙城的回答。谷歌的发现文件现已完全成熟的CORS支持。不再需要从发现文档手动设置信息的步骤。