如何使用Google Identity从多台设备登录?

问题描述 投票:0回答:1

如何使用Google Identity Platform作为我自己服务的登录/注册系统?具体 - 我该怎么做并支持来自不同设备的同一用户登录?

用于Web服务的nodejs没有npm模块:passportjs / googleapis / google-auth-library。

我的想法:用户打开myClientApp /登录页面并点击GoogleLogIn按钮,这将要求他为我的Google帐户的特定范围授权我的服务。然后我获取刷新令牌和访问令牌并将其保存在DB中,然后使用cookie将刷新令牌发送到客户端。每当我调用自己的服务API时,我都会从cookie中发送刷新令牌。只要我在我的数据库中保存了有效的访问令牌或刷新令牌未过期 - 我将匹配该刷新令牌的用户视为我的服务的活动会话。

安全问题:cookie攻击,可以从浏览器轻松访问刷新令牌。可以使用https /加密和更多方法来保护cookie及其价值。还是有人可以将cookie从一台计算机复制到另一台计算机!

多个登录问题:如果用户在不同设备上登录,则会创建新的刷新令牌。用户登录的先前设备现在将在cookie中保存错误的刷新令牌...

OpenID可以解决这个问题吗?我需要使用JWT吗?在支持同一用户登录多个设备的同时,在我自己的服务中使用Google身份登录的最安全方式是什么?

google-oauth2 google-identity
1个回答
0
投票

首先,确保您真正了解您想要做的事情的安全隐患。

例如,永远不要将刷新令牌发送到客户端。

如果您想在多个设备上为同一个客户端使用相同的令牌,则会出现鸡蛋和鸡蛋的情况。如何在每台设备上“验证”用户。你怎么知道用户“John”实际上是用户“John”,但第一次在另一台设备上?

您的目标不是为了降低安全性而交易便利性。无论给您带来何种不便,您的目标始终应该是安全第一。

更好的方法是让Google在每台设备上对用户进行身份验证和授权。他们每个设备只需要这样做一次。您的后端系统会跟踪为每个设备发出的刷新令牌。然后,您可以在需要时生成访问令牌和身份令牌 - 它们会在一小时后过期。在用户的设备上存储一个cookie,用于向系统标识它们,以便您可以查找它们的身份,获取刷新令牌,创建新的访问令牌等。

在最旧的令牌无效之前可以发出的刷新令牌的数量是有限的。我认为这个数字是50.这通常不是问题。如果刷新令牌无效,只需将用户放回到身份验证过程并存储新令牌即可。

还为用户提供了一种注销方法,用于删除系统中存储的所有令牌。

您存储在客户端设备上的cookie应该是不透明的,这意味着cookie中没有存储的信息,并且cookie仅对该设备有效,而对其他设备无效。这解决了被盗cookie移动到另一个设备的问题。

我现在谈谈你的一些问题:

我的想法:用户打开myClientApp /登录页面并点击GoogleLogIn按钮,这将要求他为我的Google帐户的特定范围授权我的服务。

Google OAuth无法正常运行。您将用户发送到URL,Google管理所有显示并输入最终用户。一切都完成后,将调用服务器上的回调URL并传递代码。具体细节取决于您使用的OAuth流的类型。

然后我获取刷新令牌和访问令牌并将其保存在DB中,然后使用cookie将刷新令牌发送到客户端。

在OAuth Flow期间,您将请求访问令牌,刷新令牌和身份令牌。刷新令牌保存在数据库中。切勿将此令牌发送给客户端。请阅读上面有关创建发送给客户端的不透明cookie的建议。

安全问题:cookie攻击,可以从浏览器轻松访问刷新令牌。可以使用https /加密和更多方法来保护cookie及其价值。还是有人可以将cookie从一台计算机复制到另一台计算机!

创建一个仅对该设备有效且不包含其他设备的不透明cookie。如果客户端向您发送了针对其他设备的cookie,请考虑这是一个问题,并使所有设备上的此用户的所有cookie,令牌等无效。

多个登录问题:如果用户在不同设备上登录,则会创建新的刷新令牌。用户登录的先前设备现在将在cookie中保存错误的刷新令牌...

我在上面讨论了这个问题。存储为数据库中的每个设备生成的刷新令牌。将每个设备/刷新令牌/ cookie视为一组。

OpenID可以解决这个问题吗?我需要使用JWT吗?在支持同一用户登录多个设备的同时,在我自己的服务中使用Google身份登录的最安全方式是什么?

通过Open ID,我认为您的意思是Open ID Connect(OIDC)。这已经集成到Google OAuth中,这是生成身份令牌的部分。

我需要使用JWT吗?

Google OAuth令牌是从签名JWT生成的。但是在大多数情况下,您无需担心令牌的格式。 Google提供了验证和解码Google OAuth令牌的终端。

在支持同一用户登录多个设备的同时,在我自己的服务中使用Google身份登录的最安全方式是什么?

我在上面的答案的第一部分中提到了这个问题。

© www.soinside.com 2019 - 2024. All rights reserved.