Expires_in 或 expires_at 用于 OpenId 连接中的访问令牌?

Sup*_*Bob 4 authorization access-token openid-connect asp.net-core identityserver4

我很困惑为什么 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 中定义)以及当前刷新令牌(存储在 currentRefreshToken 中)来保存新刷新的令牌。当访问令牌中显示/存储的属性名为“expires_at”时,为什么 tokenResult 具有属性“ExpiresIn”?难道它们不应该是统一的吗?即使规范明确规定它应该命名为“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)
}

Run Code Online (Sandbox Code Playgroud)

编辑:我刚刚意识到“expires_at”可能不是指访问令牌,而是指整个身份验证票证?请纠正我,我真的很困惑。

mac*_*kie 9

JWT 使用iatexp作为声明名称,我不知道expires_at规范中是否有 。

\n\n

expires_in是在令牌响应中返回的值,它指的是access_token返回的生命周期。我怀疑其背后的想法是允许安排刷新而不必检查exp令牌中的声明。

\n\n

您链接到的主题 ( https://openid.net/specs/openid-connect-core-1_0.html#TokenResponse ) 显示令牌端点响应,而不是 JWT 的内容。

\n\n

你在哪里看到expires_at浮出水面的?AuthenticationToken我认为这是 ASP.Net Identity 的事情,所以它很可能是库存储的计算值,与identityserver4OpenID Connect 无关。

\n\n

根据您的评论,\xe2\x80\x99 将是 OIDC 中间件将这些属性添加到登录方案中。查看第 138 行的代码:

\n\n

https://github.com/aspnet/Security/blob/7e14b052ea9cb935ec4f5cb0485b4edb5d41297a/src/Microsoft.AspNetCore.Authentication.OAuth/OAuthHandler.cs

\n\n

所以基本上它\xe2\x80\x99是特定于ASP.Net Core\xe2\x80\x99s OIDC实现的实现细节,而不是协议本身的一部分。

\n