Google登录——访问令牌、身份验证令牌和JWT ID令牌之间的区别

4

我在我的 Web 应用程序中使用 OAuth 流程。我的 Web 应用程序与 Google 日历 API 交互,并且用户通过使用他们的 Gmail 帐户登录以进行身份验证。

我只是想确保我的身份验证令牌和访问令牌的理解和使用是正确的:

  1. JWT ID 令牌仅在登录期间需要。我们只需要在登录期间验证它一次,例如:client.verifyIdToken({idToken: token, audience: CLIENT_ID})。ID 令牌不用于将用户身份验证到我的 Web 应用程序。参考:https://developers.google.com/identity/sign-in/web/backend-auth

  2. 这个 JWT ID 令牌与我传递给我的 Web 应用程序安全(已认证)端点的身份验证令牌完全不同。身份验证令牌表示用户会话,可以使用任何库生成(例如:crypto.generateRandomNumber())。

  3. 另一方面,我将拥有许多访问令牌,用于访问第三方 API(例如 Slack API、Google 日历 API)。这些访问令牌与上述 JWT ID 令牌和身份验证令牌不同。

我的理解/实现是否正确?有一次,我实际上使用我的 Google 日历 API 访问 令牌作为我的 Web 应用程序的 身份验证 令牌,但意识到这可能是错误的。访问令牌将授权用户使用 Google/第三方 API,但我需要一个单独的身份验证令牌来将用户身份验证到我的 Web 应用程序。

1个回答

2
JWT ID Token仅在登录期间需要。
正确的说法是Open Id connect,id token用于验证电脑后面的用户是否是账户的所有者,因为他们知道登录名和密码。可以把它看作是您的出生证明,证明您就是您本人。
这个JWT ID Token与认证令牌完全不同。
正确的说法是,认证令牌表示用户会话,并且可以使用任何库生成。
不正确的Oauth2允许您的应用程序在某些情况下请求经过Open id connect身份验证的用户同意,以授予应用程序访问其数据的权限。它与会话无关。使用访问令牌,您的应用程序可以在一定时间内访问数据。使用刷新令牌,您的应用程序可以在到期时随时请求新的访问令牌。认证更像是您的驾驶执照,您被授权驾驶汽车。
每个第三方API都有自己的授权服务器。您的应用程序需要注册,他们会给你一个客户端ID和密钥,您可以使用它来生成访问令牌,以通过他们的API访问用户的数据。
客户端ID + 客户端密钥 + 用户同意 = 访问令牌和刷新令牌,以获取授权范围所允许的API访问
在某个时候,我实际上正在使用我的Google日历API访问令牌作为我的Web应用程序的身份验证令牌,但后来意识到这可能是错误的。
在Open id connect之前,这种情况可能经常发生,现在仍然存在。
访问令牌将授权用户使用Google/第三方API,但我需要一个单独的身份验证令牌来将用户认证到我的Web应用程序中。
从技术上讲,是的。但是,如果您具有内部登录系统,其中用户在您的系统中创建帐户,则这是您的身份验证,您只需请求对用户的Google帐户进行额外授权,并将其刷新令牌存储为您内部身份验证的一部分。
您可以使用多个身份验证提供程序(Facebook、Twitter、Google),但最好拥有一个内部提供程序,将它们全部映射在一起,否则用户可能会在您的系统中拥有三个帐户。

感谢@DaImTo提供如此清晰的解释。以前,我看到过一些Web应用程序在调用安全的内部端点时每次都发送他们的JWT ID令牌,这些应用程序还包括“使用Google登录”功能。我也看到过一些人使用某些库生成自己的Auth Token,并将该Auth Token传递给他们的安全端点。根据您的回答,第一种方法是错误的。有没有关于如何为node.js项目构建内部身份验证系统的资源? - Universal Thinker
你不能生成自己的授权令牌,授权令牌是由授权服务器生成的。你的应用程序唯一需要做的就是发送其客户端ID和密钥以换取授权令牌。 - Linda Lawton - DaImTo
@DalmTo,非常抱歉,我在第一次评论中指的是认证令牌(会话ID),而不是Oauth授权令牌。从现在开始,我将继续称其为会话ID。使用Google Oauth访问令牌和随机生成的字符串作为我的会话ID是否正确?这两个都可以作为“使用Google登录”应用程序的有效会话ID吗? - Universal Thinker
@universal thinker 我也正在构建一个带有Google登录和使用Google日历API的Web应用程序,并且遇到了类似的设计问题。您提供的参考链接 https://developers.google.com/identity/sign-in/web/backend-auth 是关于使用gapi库进行Google登录的,但该库已被弃用。您是在使用这个库吗?还是在使用新的Google登录 - https://developers.google.com/identity/gsi/web/reference/html-reference,它正在取代它。另外,您是在构建传统的Web应用程序还是单页应用程序? - user2897377

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接