我对为什么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'可能不是指访问令牌,而是整个身份验证票证?请对此进行纠正,我真的很困惑。
答案 0 :(得分:0)
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 Identity的东西,因此它很可能是库存储的计算值,与identityserver4
或OpenID Connect完全无关。
根据您的评论,它将是OIDC中间件将这些属性添加到登录方案中。在第138行上查看代码:
因此,基本上,这是特定于ASP.Net Core的OIDC实现的实现细节,而不是协议本身的一部分。