.net core IdentityServer4查找PersistedGrantStore中应用于当前刷新令牌的授权

.net core IdentityServer4查找PersistedGrantStore中应用于当前刷新令牌的授权,.net-core,identityserver4,.net Core,Identityserver4,我们有一个使用IdentityServer4进行身份验证的web api。要求之一是为用户发回“活动会话”列表。我们使用基于EntityFramework的自定义IPersistedGrantStore将授权存储在SQL中 是否有任何方法可以从web请求获取信息(在请求到达API时,我可以看到完整的承载令牌)并在数据库中找到应用于它的授权 行中的“键”不是令牌本身。我不会每次刷新令牌时都更改它们。是否有一些方法可以散列令牌并将其与现有密钥进行比较,从而说“这是您当前的会话?” 想法是我可以“注销

我们有一个使用IdentityServer4进行身份验证的web api。要求之一是为用户发回“活动会话”列表。我们使用基于EntityFramework的自定义IPersistedGrantStore将授权存储在SQL中

是否有任何方法可以从web请求获取信息(在请求到达API时,我可以看到完整的承载令牌)并在数据库中找到应用于它的授权

行中的“键”不是令牌本身。我不会每次刷新令牌时都更改它们。是否有一些方法可以散列令牌并将其与现有密钥进行比较,从而说“这是您当前的会话?”

想法是我可以“注销所有会话(除此会话外)”


我目前的最佳猜测是根据用户id、客户端id和创建时间查找行。但是,如果可能的话,我希望能够通过键获取它。

我们最终为cookie中间件创建了一个自定义ITicketStore(通过SessionStore config属性),以在PersistedGrants表中存储cookie值(以及它们相关的主体)。我们使用
AuthenticationTicket
中的
session\u id
属性(它是会话id cookie和令牌中作为
sid
声明结束的值)作为密钥和
auth\u ticket
的一种类型


一旦设置好了此选项,就可以删除(从而结束)与用户相关的任何身份验证会话,并根据需要排除当前会话。

首先,您确定需要活动刷新令牌列表吗?你说的是主动治疗,那完全是另一回事。会话通常只是一个保存客户端列表的cookie,在。。。当前用户会话:)也许您应该问:如何注销所有会话(此会话除外)。IPersistedGrantStore似乎不是实现这一点的正确服务。我们目前计划只向客户端颁发带有刷新令牌的auth,因此ew可以依赖persistedgrants表,但如果我们需要添加不请求“脱机访问”的新客户端,这可能是一个问题,因为您可以登录,但没有刷新令牌。是的,只是删除那里的行对我们有用。我目前正在使用令牌创建的时间和客户端id,并将其与承载令牌中的当前值进行比较,以“最佳猜测”当前会话。