持久授权

许多授权类型需要在 IdentityServer 中持久化。 其中包括授权代码、刷新令牌、参考令牌和记住的用户同意。 在 IdentityServer 内部,这些授权的默认存储位于称为持久授权存储的公共存储中。

持久授权

持久授权是维护授权值的数据类型。 它具有以下属性:

Key

存储中持久授权的唯一标识符。

Type

授权的类型。

SubjectId

授予所属的主体 ID。

ClientId

为其创建授权的客户端标识符。

Description

用户分配给授权或被授权设备的描述。

CreationTime

创建授权的日期/时间。

Expiration

授权到期。

ConsumedTime

授权 已消耗 的日期/时间(见下文)。

Data

授权特定的序列化数据。

注解

Data 属性包含所有值(以及更多)的副本,并且被 IdentityServer 认为是权威的,因此默认情况下,上述值被认为是信息性的只读值。

存在于存储中,没有 ConsumedTime 且仍在 Expiration 内的记录,表示授权的有效性。 设置这两个值中的任何一个,或者从存储中删除记录,都可以有效地撤销授权。

授权消费

某些授权类型只能一次性使用(根据定义或配置)。 一旦它们被 使用,而不是删除记录,ConsumedTime 值被设置在数据库中,将它们标记为已被使用。 这种 软删除 允许自定义实现 在允许重新使用授权方面 具有灵活性(通常在很短的时间内), 或用于风险评估和威胁缓解方案(检测到可疑活动)以撤销访问。 对于刷新令牌,此类自定义逻辑将在 IRefreshTokenService 中执行。

持久授权服务

直接使用授权存储可能级别太低。 因此,提供了一个名为 IPersistedGrantService 的更高级别的服务。 它将不同的授权类型抽象并聚合到一个概念中,并允许查询和撤销用户的持久授权。

它包含以下 API:

GetAllGrantsAsync

根据主体 ID 获取用户的所有授权。

RemoveAllGrantsAsync

根据主体 id 和可选的客户端 id 和/或会话 id 从存储中删除授权。