当前位置: 首页 > 知识库问答 >
问题:

OpenID Connect中ID令牌过期时间的意图是什么?

包和泰
2023-03-14

在OpenID Connect中,访问令牌有一个过期时间。对于授权代码流,这通常是很短的(例如20分钟),然后使用刷新令牌请求新的访问令牌。

ID令牌也有一个过期时间。我的问题是这样做的用意是什么?

任何ID令牌的过期时间小于刷新令牌的过期时间都意味着您最终将拥有一个过期的ID令牌,但却是一个有效的访问令牌。

  • 给ID令牌一个比刷新令牌有效期更长的有效期,或
  • 将其设置为与访问令牌相同的过期时间,并执行某些操作(什么?)过期时,或
  • 只需在收到时使用客户端中的ID令牌,然后忽略之后的过期时间?

OpenID Connect规范只是说当验证ID令牌时,

"The current time MUST be before the time represented by the exp Claim."

它(可能)支持上面的第三种选择。

expires_in
     RECOMMENDED.  The lifetime in seconds of the access token.

一个相关的问题是,当您将授权代码交换给令牌时,相同的规范表示您可能会得到如下响应:

{
 "access_token": "SlAV32hkKG",
 "token_type": "Bearer",
 "refresh_token": "8xLOxBtZp8",
 "expires_in": 3600,
 "id_token": "eyJhbG[...]"
}

但在这种情况下,“expires_in”与什么有关?访问令牌、刷新令牌还是ID令牌?

(有关信息,IdentityServer3将此设置为访问令牌过期时间)。

共有1个答案

汤嘉平
2023-03-14

我是在回答我自己的问题,因为我发现我的问题背后的一些假设是错误的,所以在这里更容易澄清,而不是重写问题。

ID令牌用于向客户机证明用户已通过身份验证,以及用户是谁。

当客户机接收到ID令牌时,它通常会执行一些操作,例如将其转换为ClaimsIdentity,并将其持久化,例如使用cookie。

ID令牌必须在使用时取消过期(这是应该的,因为它刚刚发出)。但在此之后,它就不再使用了,因此,如果它在用户仍有活动会话的情况下过期,也就无关紧要了。客户端拥有它所需要的身份验证信息,反过来,它可以选择自己的策略,在用户必须再次登录之前会话持续多长时间。

在提出这个问题时,我错误的假设是ID令牌和访问令牌应该一起使用,因此这两个令牌都需要有有效的过期日期。这是错误的,原因是多方面的:

  • ID令牌仅用于向客户端进行身份验证(如上所述)。
  • 访问令牌与客户端无关。它们用于访问资源,客户端只有在需要调用资源时才处理它们。
  • 像独立的MVC或WebForms应用程序这样的东西只需要ID令牌。如果它没有调用外部资源,则没有任何可授予访问权限的内容,因此没有访问令牌。
 类似资料:
  • 我用ReactJS做单页网页登录。问题是如何以及在哪里保存令牌过期时间。我需要保存在sessionStore中,但当浏览器关闭时,所有的数据都将被删除。本地商店?但数据将永远。或者我可以在localStore中保存并在每个事件中添加函数,该函数检查localStore的过期时间,当事件触发成功时再次更新localStore?但代码看起来很可怕...性能问题呢?这大概可以接受吗?

  • 我使用JWT对用户进行身份验证。我可以看到JWT生成的两种令牌(向后端发出请求的访问令牌和刷新令牌)。所以,我的问题是,什么时候该注销用户?访问令牌到期的时间还是刷新令牌到期的日期 根据用户的活动或非活动状态,使用刷新令牌endpoint获取新访问令牌的更好方法是什么

  • 我已经阅读了跑道文档。我特别考虑了以下关于使用的声明: 此请求返回与上述相同的数据,您可以继续反复执行此操作,以保持应用程序的身份验证,而无需要求用户重新身份验证。 这是否意味着将无限期有效或过期: < li >签发后X天;或者 < li >最后一次使用它获取新的< code>access_token后的X天 编辑:请参阅此跑道线程,该线程提出相同的问题,但似乎没有给出任何关于Oauth2.0协议

  • 任何人都可以告诉我通过 OAuth2 生成刷新令牌的到期时间。实际上,它通常返回 2 个参数访问令牌和刷新令牌。我们使用刷新令牌,以便在访问令牌过期时生成新的访问 toke。但是谷歌日历版本3,我正在使用刷新令牌来调用日历API。但是在这里我遇到了令牌过期的问题。所以任何人都可以建议我当令牌过期时我该怎么办。据我说,刷新令牌没有过期时间。请检查下面的代码以使用刷新令牌创建日历服务:-

  • 我对android Gcm令牌过期策略很好奇。当我希望向Gcm服务注册的设备能够接收Gcm推送消息时,我将向API注册它。 然后我会得到一个Gcm令牌“a”。如果我从未在play store上升级我的应用程序版本代码。谷歌会用“B”刷新它并自动终止“A”吗? 如果是,它什么时候做。我看过一些文章说,一旦“A”被“B”刷新,那么当服务器试图向“A”发送消息时,服务器将获得新的注册标识“B”。我现在想