首页 > 解决方案 > Google 登录 - 访问令牌、身份验证令牌和 JWT ID 令牌之间的区别

问题描述

我在我的网络应用程序中使用 OAuth Flow。我的网络应用程序与 Google 日历 API 交互,用户通过使用 Google 登录(使用他们的 Gmail 帐户)进行身份验证。

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

  1. 仅在登录期间需要 JWT ID 令牌。我们只需要在登录期间验证一次,如下所示client.verifyIdToken({idToken: token, audience: CLIENT_ID}):ID 令牌不用于向 My Web App 验证用户。参考:https ://developers.google.com/identity/sign-in/web/backend-auth

  2. 此 JWT ID 令牌与我传递给 My Web App 的安全(经过身份验证的)端点的身份验证令牌完全不同。Authentication Token 代表用户的会话,它可以使用任何库(即。crypto.generateRandomNumber())生成。

  3. 另一方面,我将拥有许多访问令牌,用于访问第三方 API(即 Slack API、Google 日历 API)。这些 Access Token 与上面提到的 JWT ID Token 和 Authentication Token 不同。

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

标签: authenticationoauthjwtauthorizationgoogle-authentication

解决方案


仅在登录期间需要 JWT ID 令牌

更正这称为Open Id connect, id 令牌用于验证计算机背后的用户是否是帐户的所有者,因为他们知道登录名和密码。把它想象成你的出生证明,它证明你就是你。

此 JWT ID Token 与 Authentication Token 完全不同

Correct Id token 或 open id connect 建立在用于授权的 Oauth2 之上。

Authentication Token 代表用户的会话,它可以使用任何库生成。

在某些情况下,不正确的 Oauth2 允许您的应用程序请求已通过 Open id connect 进行身份验证的用户的同意,以授予应用程序访问其数据的权限。它与会话无关。使用访问令牌,您的应用程序可以在一段时间内访问数据。使用刷新令牌,您的应用程序将能够在过期时请求新的访问令牌。考虑到身份验证更像是您被授权驾驶汽车的驾驶执照。

我将拥有许多访问令牌,用于访问第三方 API

正确的每个第三方 api 都有自己的授权服务器。您的应用程序需要由他们注册,他们会为您提供一个客户端 ID 和密码,您可以使用它们来生成访问令牌,以通过他们的 API 访问您的用户数据。

客户端 ID + 客户端密码 + 用户同意 = 访问令牌和刷新令牌到范围授予的 API

有一次,我实际上是在使用我的 Google Calendar API 访问令牌作为我的 Web 应用程序的身份验证令牌,但我意识到这可能是错误的。

Pre open id connect 这可能发生了很多并且仍然存在。

访问令牌将授权用户使用 Google/第三方 API,但我需要一个单独的身份验证令牌来将用户身份验证到我的 Web 应用程序中。

从技术上讲,是的。但是,如果您有一个内部登录系统,您的用户在您的系统中创建帐户,那是您在那里的身份验证,您只需请求对用户 google 帐户的额外授权,您就可以将他们的刷新令牌存储为内部身份验证的一部分。

您可以使用多个身份验证提供程序(Facebook、推特、谷歌),但最好有一个将它们全部映射在一起的内部身份验证提供程序,否则用户最终可能会在您的系统中拥有三个帐户。


推荐阅读