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



我在web应用程序中使用OAuth Flow。我的网络应用程序与Google Calendar API交互,用户通过登录Google(使用他们的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应用程序的安全(已验证)端点的身份验证令牌完全不同。Authentication Token代表用户的会话,它可以使用任何库(即crypto.generateRandomNumber())生成。

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

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

JWT ID令牌仅在登录时需要

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

此JWT ID令牌与身份验证令牌完全不同

正确的Id令牌或开放的Id连接建立在用于授权的Oauth2之上。

身份验证令牌表示用户的会话,可以使用任何库生成。

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

我会有很多访问令牌,我用它们来访问第三方API

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

客户端id+客户端机密+用户同意=访问令牌&将令牌刷新到作用域授予的api

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

在打开id连接之前,这种情况可能发生过很多次,现在仍然如此。

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

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

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