首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在OpenId connect中用于访问令牌的expires_in还是expires_at?

在OpenId connect中用于访问令牌的expires_in还是expires_at?
EN

Stack Overflow用户
提问于 2019-07-19 21:21:47
回答 1查看 4K关注 0票数 4

我搞不懂为什么OpenId连接规范(来源:https://openid.net/specs/openid-connect-core-1_0.html#TokenResponse)在JWT中引用"expires_in“键,而在ASP.NET Core2中,当使用IdentityServer4时,使用expires_at,但如果您希望操作它,则将其称为”expires_in“。我是不是漏掉了什么?

下面的代码片段显示了我所指的内容-通过传入所需的客户端信息+密码(在tokenClient中定义)以及当前刷新令牌(存储在currentRefreshToken中),tokenResult保存了新更新的令牌。当访问令牌中显示/存储的属性名为"ExpiresIn“时,为什么tokenResult会有一个属性"expires_at"?它们不应该都是统一的吗,即使规范明确规定它应该被命名为"expires_in“(属性遵循这个名称,但JWT中的实际实现不遵循这个名称)?

代码语言:javascript
复制
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‘可能指的不是访问令牌,而是整个身份验证票证?请纠正我这一点,我真的很困惑。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-07-19 22:36:37

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身份的东西,所以它很可能是一个经过计算的库存储的值,与identityserver4或OpenID连接一点关系都没有。

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

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

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

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57113396

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档