Asp.net web api 刷新令牌-多个客户端的服务器端存储和撤销
我开始使用ASOS(AspNet.Security.OpenIdConnect.Server)框架进行基于令牌的身份验证 我已经完成了访问令牌的生成和检索,现在转到刷新令牌位 我的问题是:Asp.net web api 刷新令牌-多个客户端的服务器端存储和撤销,asp.net-web-api,oauth,oauth-2.0,asp.net-core,aspnet-contrib,Asp.net Web Api,Oauth,Oauth 2.0,Asp.net Core,Aspnet Contrib,我开始使用ASOS(AspNet.Security.OpenIdConnect.Server)框架进行基于令牌的身份验证 我已经完成了访问令牌的生成和检索,现在转到刷新令牌位 我的问题是: 我应该如何在服务器端存储刷新令牌? 我应该只在数据库中存储clientID和经过哈希和盐析的刷新令牌(以及实用程序字段,如过期日期)吗 如果我的API的用户只有一个clientID和secret,但同时执行多个调用(例如,假设他们希望在多台机器上扩展客户端以获得更好的吞吐量),那么预期的行为是什么。
- 我应该如何在服务器端存储刷新令牌?
- 我应该只在数据库中存储clientID和经过哈希和盐析的刷新令牌(以及实用程序字段,如过期日期)吗
- 如果我的API的用户只有一个clientID和secret,但同时执行多个调用(例如,假设他们希望在多台机器上扩展客户端以获得更好的吞吐量),那么预期的行为是什么。
- 具体来说,我的意思是,如果客户端的访问令牌中有一个过期了,但它们的刷新令牌也过期了怎么办? 当然,他们可以转到令牌端点,同时获取新的访问令牌和刷新令牌,但是该clientID的其他实例呢?假设它们的代码相同(即,它们不共享刷新令牌的知识),每个实例还将继续请求新的访问和刷新令牌
- 如果为clientID存储一个刷新令牌,那么最终会过度请求刷新令牌,可能每次访问令牌过期时都会请求刷新令牌,这是不可取的
- 如果您为一个客户端存储多个刷新令牌,那么多少是一个合理的数字
context.Ticket.GetTokenId()
和context.Ticket.ExpiresUtc
从SerializeRefreshToken
事件中检索刷新令牌标识符和过期日期
注意:默认标识符是GUID,但您可以使用context.Ticket.SetTokenId(“令牌标识符”)
替换它
具体来说,我的意思是,如果客户端的访问令牌中有一个过期了,但它们的刷新令牌也过期了怎么办?当然,他们可以转到令牌端点,同时获取新的访问令牌和刷新令牌,但是该clientID的其他实例呢
这实际上取决于您的应用程序需求以及您如何实现它。你可以自由地考虑刷新令牌是完全独立的,反之亦然,相互依存。此逻辑通常发生在HandleTokenRequest
中
另外,撤销刷新令牌的常见过程是什么?它是否像从存储它的任何地方删除它一样简单
如果使用默认令牌格式(超过推荐值),则刷新令牌将被视为有效,直到其过期。您可以通过数据库查找(您可以使用
context.Ticket.GetTokenId()
)获取刷新令牌标识符)来检查令牌是否已从HandleTokenRequest
中撤销。谢谢。我已经读过谷歌似乎只允许一个刷新令牌,所以我将选择只允许一个,并将管理应用程序中刷新令牌的共享作为消费者的任务。