我已经编写了一个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时,出现以下错误:
编辑:我已将此问题缩小到谷歌的端点,其响应中没有设置任何CORS标头。如果我禁用Chrome的CORS安全设置,身份验证仍然有效。无论如何这都是不可取的,但这也意味着CORS是真正的罪魁祸首。XMLHttpRequest无法加载https://accounts.google.com/.well-known/openid-configuration。 No' Access-Control-Allow-Origin'标头出现在请求的资源上。起源' https://localhost:8080'因此不允许访问。
我有什么方法可以将CORS与Google的OpenID发现文档一起使用?我是否必须在Google上为我的服务器注册CORS来源?
答案 0 :(得分:2)
Google已更新OpenID Connect发现文档以支持CORS。你能再试一次吗?
答案 1 :(得分:1)
Google的OpenID发现文档似乎没有CORS支持,因此没有任何JavaScript应用可以访问它(这应该可以在谷歌方面修复)。
为了使其与oidc-client-js一起使用,您必须按照wiki中的说明手动设置从发现文档中获取的信息。
编辑(07/20/16): 感谢蒙城的回答。谷歌的发现文件现已完全成熟的CORS支持。不再需要从发现文档手动设置信息的步骤。