expires_in或expires_at用于OpenId connect中的访问令牌?

时间:2019-07-19 13:21:46

标签: asp.net-core authorization identityserver4 access-token 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中定义)以及当前的刷新令牌(存储在currentRefreshToken中)来保存新刷新的令牌。为什么将显示/存储在访问令牌中的令牌命名为“ expires_at”,tokenResult为何具有“ ExpiresIn”属性?

>尽管规范中明确指出了它们应该被命名为“ expires_in”(属性遵循该属性,但JWT中的实际实现却没有),但它们是否应该统一起来?
list1 = [[*x] for x in var1]

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

1 个答案:

答案 0 :(得分:0)

JWT使用iatexp作为声明名称,我不了解规范中的expires_at

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

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

您在哪里看到expires_at浮出水面? AuthenticationToken是ASP.Net Identity的东西,因此它很可能是库存储的计算值,与identityserver4或OpenID Connect完全无关。

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

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

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