加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net-web-api – 刷新令牌 – 服务器端存储和撤销多个客户端

发布时间:2020-12-16 09:42:32 所属栏目:asp.Net 来源:网络整理
导读:我正在使用ASOS(AspNet.Security.OpenIdConnect.Server)框架开始基于令牌的身份验证. 我已经完成了访问令牌的生成和检索,现在我正在转向刷新令牌位. 我的问题是: 我应该如何存储刷新令牌服务器端? 我是否应该将clientID和散列和盐渍刷新令牌存储在数据库中
我正在使用ASOS(AspNet.Security.OpenIdConnect.Server)框架开始基于令牌的身份验证.

我已经完成了访问令牌的生成和检索,现在我正在转向刷新令牌位.

我的问题是:

>我应该如何存储刷新令牌服务器端?

>我是否应该将clientID和散列和盐渍刷新令牌存储在数据库中(以及实用程序字段,例如到期日期)?

>如果我的API用户具有单个clientID和机密,但同时执行多个调用(假设他们希望在多台计算机上扩展客户端以获得更好的吞吐量),那么预期的行为是什么?

>具体来说,我的意思是如果客户端的一个访问令牌过期,但他们的刷新令牌也已过期?
当然,他们可以同时到令牌端点获取新的访问令牌和刷新令牌,但那个clientID的其他实例呢?假设它们的代码是相同的(即它们不共享刷新令牌的知识),每个实例也将继续请求新的访问和刷新令牌.
>如果为clientID存储单个刷新令牌,则最终会过度请求刷新令牌,可能每次访问令牌到期时都是如此,这是不可取的.
>如果您为客户存储多个刷新令牌,那么有多少是合理的数字?

另外,撤销刷新令牌的常见过程是什么?
是否只是从存储它的地方删除它一样简单?

谢谢.

解决方法

Should I just store the clientID and the hashed and salted refresh token in a database (Along with utility fields,such as an expiration date)?

我建议的方法是使用ASOS附加的票证标识符来创建它的所有令牌.您可以通过context.Ticket.GetTokenId()和context.Ticket.ExpiresUtc从SerializeRefreshToken事件中检索刷新令牌标识符和到期日期.

注意:默认标识符是GUID,但您可以使用context.Ticket.SetTokenId(“标记标识符”)替换它.

Specifically,I mean what if 1 of the client’s access tokens expires,but their refresh token has also expired? Of course they can go to the token endpoint to get a new access token and refresh token at the same time,but then what about the other instances for that clientID?

这实际上取决于您的应用程序要求以及如何实现它.您可以将刷新令牌视为完全独立,或者相反,相互依赖.这个逻辑通常会发生在HandleTokenRequest中.

Also,what is the common process of revoking the refresh tokens? Is it as simple as just deleting it from wherever you’re storing it?

如果您使用默认令牌格式(超过推荐值),刷新令牌将被视为有效,直到它们过期.您可以通过进行数据库查找来检查令牌是否已从HandleTokenRequest中撤消(您可以使用context.Ticket.GetTokenId()获取刷新令牌标识符)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读