Google API:授权的JavaScript起源

Google API: Authorized JavaScript Origins

本文关键字:JavaScript 起源 授权 API Google      更新时间:2023-09-26

我正在为我们的web服务实现Google+登录,并偶然发现了"授权JavaScript起源"。我们的客户有网址作为我们的主域名的子域名,或作为自定义域名。由于登录页面在该子域(或自定义域)下,为了使Google+ singin按钮工作,该自定义域/子域应该(手动)在"授权JavaScript起源"列表中输入(包括http和https)。

有没有人知道一种方法来自动做到这一点(通过一些API也许)?如果不是,那么你怎么做呢?

不确定是否有API。乍一看,我没有看到。另一种选择(除了一直手动添加域之外)是在每个站点上使用一个隐藏的iframe -这个iframe将来自您的域,并且将是唯一调用google服务的东西。主要站点将与iframe (postMessage)通信,告诉它要向google发送什么。当然,这会带来安全风险(任何人都可以将您的iframe加载到他们的页面并代表您做坏事),所以您要确保iframe代码拒绝做任何事情,除非它在已知良好域的页面中运行。

你也可以有一个共同的URL,所有的子域名指向当尝试登录与谷歌。然后将此URL重定向到您实际的Google登录路径。

最后我让它工作,但是可能有一些修复应用。

所以一个服务器是主机的许多域名和子域名(),他们都需要谷歌登录,有一个主域()。

我在上实现了一个通用登录页面,通过window.open()作为弹出窗口打开此页面。由于客户端处于弹出窗口,auth2很可能无法打开另一个弹出窗口,因此将使用{ux_mode: 'redirect'}参数作为gapi.auth2.SignInOptions进行google验证。

进程将继续到您作为另一个gapi.auth2.SignInOptions参数提供的回调页面,该参数为redirect_uri,并且位于上。

在这个页面上,google可能已经为您提供了黄金的 id_token ,您必须在您的服务器上验证这个令牌。这是主要的转折,你应该使用这些信息在服务器上创建一个令牌,请求服务器创建,但将其发送给客户端的(例如通过查询参数)以供以后使用。

我很乐意接受任何关于安全漏洞的建议或任何可能使过程稍微简化的评论。