Asp.net core expires_in或expires_at用于OpenId connect中的访问令牌?

Asp.net core expires_in或expires_at用于OpenId connect中的访问令牌?,asp.net-core,authorization,identityserver4,access-token,openid-connect,Asp.net Core,Authorization,Identityserver4,Access Token,Openid Connect,我对OpenId connect规范源代码的原因感到困惑:在JWT中引用一个'expires_in'键,而在ASP.NET Core 2中,当使用IdentityServer4时,使用expires_at,但如果您希望操作它,则将其称为expires_in。 我是不是遗漏了什么 下面是一个片段,显示了我所指的内容-tokenResult通过传入tokenClient中定义的所需客户端信息+机密以及currentRefreshToken中存储的当前刷新令牌来保存新刷新的令牌。当访问令牌中显示/存储

我对OpenId connect规范源代码的原因感到困惑:在JWT中引用一个'expires_in'键,而在ASP.NET Core 2中,当使用IdentityServer4时,使用expires_at,但如果您希望操作它,则将其称为expires_in。 我是不是遗漏了什么

下面是一个片段,显示了我所指的内容-tokenResult通过传入tokenClient中定义的所需客户端信息+机密以及currentRefreshToken中存储的当前刷新令牌来保存新刷新的令牌。当访问令牌中显示/存储的属性名为expires\u at时,为什么tokenResult具有ExpiresIn属性?它们不应该统一起来吗?即使规范明确规定它应该命名为expires\u,属性在其中遵循,但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\u

expires_in是在令牌响应中返回的值,它表示返回的访问令牌的生存期。我怀疑它背后的想法是允许安排刷新,而不必检查令牌中的exp声明

链接到的主题显示令牌端点响应,而不是JWT的内容

你在哪里看到你浮出水面?AuthenticationToken我认为是ASP.Net身份的东西,所以它很可能是库存储的计算值,与identityserver4或OpenID Connect完全无关

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


因此,基本上这是一个特定于ASP.Net内核的OIDC实现的实现细节,而不是协议本身的一部分。

在我执行任何操作之前,当我执行以下var expires\u at=wait currentContext.GetTokenAsynceExpires\u at;它似乎在返回expires_,尽管我不知道它存在于何处,也不知道它与什么相关。当我等待currentContext.getTokenAsyncCopenIdConnectParameterNames.ExpiresIn时,我知道我在调用什么;但这是不一样的。我认为它是定制的,但当新用户通过该代码时不会引发异常,而且它确实返回了一个实际的日期时间字符串?我根据您的评论扩展了我的答案。