Table of Contents

Interface IPersistedGrantStore

Namespace
Fdyay.IdentityServer.Stores
Assembly
Fdyay.IdentityServer.Core.dll

Stores persisted grants (codes, refresh tokens, reference tokens, consents).

public interface IPersistedGrantStore

Methods

GetAllAsync(PersistedGrantFilter, CancellationToken)

Gets all grants matching the filter.

Task<IEnumerable<PersistedGrant>> GetAllAsync(PersistedGrantFilter filter, CancellationToken cancellationToken = default)

Parameters

filter PersistedGrantFilter
cancellationToken CancellationToken

Returns

Task<IEnumerable<PersistedGrant>>

GetAsync(string, CancellationToken)

Gets a grant by key, or null if not found.

Task<PersistedGrant?> GetAsync(string key, CancellationToken cancellationToken = default)

Parameters

key string
cancellationToken CancellationToken

Returns

Task<PersistedGrant>

RemoveAllAsync(PersistedGrantFilter, CancellationToken)

Removes all grants matching the filter.

Task RemoveAllAsync(PersistedGrantFilter filter, CancellationToken cancellationToken = default)

Parameters

filter PersistedGrantFilter
cancellationToken CancellationToken

Returns

Task

RemoveAsync(string, CancellationToken)

Removes a grant by key.

Task RemoveAsync(string key, CancellationToken cancellationToken = default)

Parameters

key string
cancellationToken CancellationToken

Returns

Task

StoreAsync(PersistedGrant, CancellationToken)

Stores a grant.

Task StoreAsync(PersistedGrant grant, CancellationToken cancellationToken = default)

Parameters

grant PersistedGrant
cancellationToken CancellationToken

Returns

Task

TryConsumeAsync(string, DateTime, CancellationToken)

Marks a grant consumed at consumedTime, unless it is gone or consumed already.

Task<bool> TryConsumeAsync(string key, DateTime consumedTime, CancellationToken cancellationToken = default)

Parameters

key string

The grant's key.

consumedTime DateTime

When it was consumed, written to ConsumedTime.

cancellationToken CancellationToken

Cancels the write.

Returns

Task<bool>

True when this call consumed the grant; false when it was gone or another call had consumed it.

Remarks

The same guarantee as TryRemoveAsync(string, CancellationToken) for a one-time refresh token, which is consumed rather than removed so that a later presentation is recognised as a replay. The in-memory, Dapper and data-protecting stores consume in one step; this default reads, checks and writes back, as consuming did before 0.176.0.

TryRemoveAsync(string, CancellationToken)

Removes a grant by key, saying whether this call is the one that removed it.

Task<bool> TryRemoveAsync(string key, CancellationToken cancellationToken = default)

Parameters

key string

The grant's key.

cancellationToken CancellationToken

Cancels the removal.

Returns

Task<bool>

True when the grant was there and this call removed it; false when it was already gone.

Remarks

What makes a one-time grant — an authorization code, a refresh token deleted on use — redeemable once when two requests present it at the same moment: both may read it, and only the one whose removal took it goes on. Ours (security), 0.176.0; Duende's store has no such member and its callers read, then remove.

The in-memory, Dapper and data-protecting stores take the grant in one step. This default, for a store of a host's own written before 0.176.0, reads and then removes — correct, and as open to the race as every store was before; a store that can delete and count the rows deleted in one statement should implement it.