我正在将 Google 集成为我网站的登录选项。我使用 Oauth2 重定向用户并使用 code
返回我的网站,我用它在后端检索访问令牌,然后返回用户信息。我收到用户电子邮件(我使用范围 email
)、sub
(主题,我使用谷歌登录用作标识符)和 name
。
我调用端点 https://www.googleapis.com/oauth2/v3/userinfo?access_token=<access_token>
检索它。
这是在登录/注册页面中实现的,但有包含表单的离线页面,我希望能够在不重定向的情况下对用户进行身份验证。我已经在 Facebook 上这样做了,我使用他们的 javascript 库显示一个弹出窗口供用户进行身份验证,并检索我发送到后端的访问令牌以检索用户信息,如 Oauth2 with redirect case .
对于 Google,我也在使用他们的 javascript API,我发现除了客户端 ID 之外,它还需要一个 API 密钥。我创建了一个,将其限制在我的域中(目前,localhost
),并且能够执行与 Facebook 案例相同的步骤,显示一个弹出窗口,在客户端检索访问令牌,发送它到后端并使用访问令牌检索用户信息。
我的问题是:
主题是否可以用作用户登录 Google 时的标识符?
API 密钥发送给客户端是否安全?是否有一些官方文档对此进行了说明(发送给客户是安全的)?对于我所看到的,比如 here,在评论中看到并阅读了 Google 文档,似乎没有很大的安全问题,尽管有人可以使用它来消耗我的请求配额。
如果 2
是正确的,我如何限制 API 密钥,以便我可以继续执行上述步骤,使用访问令牌访问同一端点,检索用户 email
, sub
和 name
,但阻止任何人尝试使用我的配额访问 API 密钥不需要的 Firebase、谷歌地图和其他内容?