Auth0中的id_token和access_token有什么区别?

51
在Auth0中,您可以使用刷新令牌。在此链接中,我们可以看到许多返回的参数:
lock.showSignin({
  authParams: {
    scope: 'openid offline_access'
  }
}, function (err, profile, id_token, access_token, state, refresh_token) {
  // store refresh_token
});

显然,访问令牌可以用于检索用户配置文件数据。但这似乎是特定于oauth的,我以为auth0使用openid?

id_tokenaccess_token之间有什么区别?


2
Auth0文档对他们(众多的)令牌有很好的概述 https://auth0.com/docs/tokens - Jason
2个回答

54

OpenID Connect是建立在OAuth2之上的。

  • access_token用于调用Auth0中的某些API(例如/userinfo)或您在Auth0中定义的API。
  • id_token是一个JWT,表示已登录的用户。它通常被您的应用程序使用。
  • refresh_token(仅供移动/桌面应用程序使用)不会过期(但可撤销),它允许您获取新生成的access_tokensid_token

9
一个刷新令牌(只能由移动应用程序/桌面应用程序使用)。您需要说明吗?似乎其他人建议即使在 Web 应用程序中也要使用刷新令牌:https://dev59.com/0F8d5IYBdhLWcg3wgya4. - Scott Coates
根据Auth2.0,刷新令牌确实有过期时间,但它的生命周期比security_token要长得多。(在OpenId中可能不是这样)。此外,刷新令牌是可选的,由STS决定是否发送。然而,在隐式授权中,它绝对不会被发送,因为这将是有风险的,但在授权码授权中是可选的。 - Assil
2
此外,access_token 也可以是 jwt。可能还包含作用域!更多详情请参见:https://mannharleen.github.io/2020-03-11-id-access-tokens/ - human

26
你的服务器端应用程序(资源服务器)仅接受客户端的访问令牌。这是因为访问令牌旨在授权对资源的访问。另一方面,ID令牌旨在进行身份验证。包含有关终端用户信息的OpenID提供者授予此权限。来源 访问令牌是应用程序代表用户发出API请求的凭证。访问令牌代表特定应用程序访问用户数据特定部分的授权。必须保密访问令牌。
刷新令牌的概念是,如果访问令牌被攻击者窃取,由于其有效期短暂,攻击者可以滥用它的时间有限。如果刷新令牌被攻击者窃取,它是无用的,因为攻击者需要客户端ID和密钥以及刷新令牌才能获得访问令牌。来源 刷新令牌的生命周期由授权服务器(AS)决定-它们可能会过期、被吊销等。刷新令牌和访问令牌之间的差异在于受众:刷新令牌仅返回给授权服务器,而访问令牌则返回给资源服务器(RS)。来源

1
喜欢你的回答。我们正在使用Google的身份验证和ID令牌。由于ID令牌在60分钟后过期,让用户每小时登录会很麻烦。但是他们没有提供自动刷新。有什么建议吗? - Jeb50

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