expires_in 或 expires_at 用于 OpenId 连接中的访问令牌?
expires_in or expires_at used for access tokens in OpenId connect?
我很困惑为什么 OpenId 连接规范(来源:https://openid.net/specs/openid-connect-core-1_0.html#TokenResponse)引用 JWT 中的 'expires_in' 键,而在 ASP.NET Core 2 中,当使用IdentityServer4,使用了expires_at,但是如果你想操作它,你就把它称为"expires_in"。
我在这里遗漏了什么吗?
下面是一个片段,显示了我所指的内容 - tokenResult 通过传入所需的客户端信息 + 秘密(在 tokenClient 中定义)以及当前刷新令牌(存储在当前刷新令牌)。为什么 tokenResult 有一个 属性 "ExpiresIn",而访问令牌中的 displayed/stored 被命名为 "expires_at"?它们不应该统一吗,即使规范明确规定它应该命名为 "expires_in"(属性 紧随其后,但 JWT 中的实际实现却没有)?
var tokenResult = await tokenClient.RequestRefreshTokenAsync(currentRefreshToken)
var expiresAt = DateTime.UtcNow + TimeSpan.FromSeconds(tokenResult.ExpiresIn)
updatedTokens.Add(new AuthenticationToken
{
Name = "expires_at"
Value = expiresAt.ToString("o", CultureInfo.InvariantCulture)
}
编辑:我刚刚意识到 'expires_at' 可能不是指访问令牌,而是整个身份验证票?请指正,我真的很困惑。
JWT 使用 iat
和 exp
作为声明名称,我不知道规范中有 expires_at
。
expires_in
是令牌响应中返回的值,它指的是返回的 access_token
的生命周期。我怀疑其背后的想法是允许安排刷新而不必检查令牌中的 exp
声明。
您链接到的主题 (https://openid.net/specs/openid-connect-core-1_0.html#TokenResponse) 显示令牌端点响应而不是 JWT 的内容。
你在哪里看到 expires_at
浮出水面? AuthenticationToken
我认为是一个 ASP.Net 身份的东西,所以它很可能是图书馆存储的计算值,与 identityserver4
或 OpenID Connect 完全无关。
根据您的评论,OIDC 中间件会将这些属性添加到登录方案中。在第 138 行查看代码:
所以基本上它是一个特定于 ASP.Net Core 的 OIDC 实现的实现细节,而不是协议本身的一部分。
我很困惑为什么 OpenId 连接规范(来源:https://openid.net/specs/openid-connect-core-1_0.html#TokenResponse)引用 JWT 中的 'expires_in' 键,而在 ASP.NET Core 2 中,当使用IdentityServer4,使用了expires_at,但是如果你想操作它,你就把它称为"expires_in"。 我在这里遗漏了什么吗?
下面是一个片段,显示了我所指的内容 - tokenResult 通过传入所需的客户端信息 + 秘密(在 tokenClient 中定义)以及当前刷新令牌(存储在当前刷新令牌)。为什么 tokenResult 有一个 属性 "ExpiresIn",而访问令牌中的 displayed/stored 被命名为 "expires_at"?它们不应该统一吗,即使规范明确规定它应该命名为 "expires_in"(属性 紧随其后,但 JWT 中的实际实现却没有)?
var tokenResult = await tokenClient.RequestRefreshTokenAsync(currentRefreshToken)
var expiresAt = DateTime.UtcNow + TimeSpan.FromSeconds(tokenResult.ExpiresIn)
updatedTokens.Add(new AuthenticationToken
{
Name = "expires_at"
Value = expiresAt.ToString("o", CultureInfo.InvariantCulture)
}
编辑:我刚刚意识到 'expires_at' 可能不是指访问令牌,而是整个身份验证票?请指正,我真的很困惑。
JWT 使用 iat
和 exp
作为声明名称,我不知道规范中有 expires_at
。
expires_in
是令牌响应中返回的值,它指的是返回的 access_token
的生命周期。我怀疑其背后的想法是允许安排刷新而不必检查令牌中的 exp
声明。
您链接到的主题 (https://openid.net/specs/openid-connect-core-1_0.html#TokenResponse) 显示令牌端点响应而不是 JWT 的内容。
你在哪里看到 expires_at
浮出水面? AuthenticationToken
我认为是一个 ASP.Net 身份的东西,所以它很可能是图书馆存储的计算值,与 identityserver4
或 OpenID Connect 完全无关。
根据您的评论,OIDC 中间件会将这些属性添加到登录方案中。在第 138 行查看代码:
所以基本上它是一个特定于 ASP.Net Core 的 OIDC 实现的实现细节,而不是协议本身的一部分。