是否需要在数据库中持久保存刷新令牌

时间:2018-10-26 19:05:33

标签: c# asp.net-mvc oauth-2.0 identityserver4 identity

我正在使用资源所有者密码流,并且我成功访问了令牌和刷新令牌,但是我没有在数据库中持久保存任何令牌,并且本地一切正常。 但是,当我在生产中部署身份服务器时,刷新令牌无法按预期工作。 我已将访问令牌的过期时间设置为20分钟,并刷新了令牌的过期时间为7天。

如果我在20分钟内或访问令牌到期之前刷新访问令牌,则刷新令牌刷新访问令牌并按预期工作,但访问令牌到期后刷新令牌不会刷新访问令牌并抛出invalid_grant错误。

由于我没有在数据库中保存刷新令牌,因此我在Google上进行了搜索,但答案很混乱。

所以任何人都可以告诉我:

当刷新令牌在本地可以正常工作而不存储时,我是否需要存储它?如果是,则有任何实现参考,我正在使用mysql作为数据库。

或者我需要看的其他东西。

谢谢。

您的回应对我来说很有价值。

1 个答案:

答案 0 :(得分:0)

在本地运行“开箱即用” IdentityServer4时,诸如刷新令牌之类的东西不会持久存在,通常在开发的早期阶段就可以了。

但是,当计划将身份提供程序部署到服务器时,无论如何,您都将需要一家运营商店(用于存储授权,用户同意等)。
该运营商店还可以存储刷新令牌和参考令牌(在IdentityServer4 docs中进行读取)。

在IdP上设置令牌存储是一个好主意。存储令牌打开了清除令牌撤销的门。客户端应用程序中明确实现的注销将在您的IdP上调用令牌吊销终结点。这是因为当用户注销时,不再需要访问令牌和刷新令牌。

您还可以从一端撤消令牌,从而使该访问令牌的后续API调用失败,并且还有一些引人注目的用例。