Table of Contents

Class InMemoryPersistedGrantStore

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

In-memory persisted grant store. Intended for development and testing.

public class InMemoryPersistedGrantStore : IPersistedGrantStore
Inheritance
InMemoryPersistedGrantStore
Implements
Inherited Members

Methods

GetAllAsync(PersistedGrantFilter, CancellationToken)

Gets all grants matching the filter.

public 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.

public 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.

public Task RemoveAllAsync(PersistedGrantFilter filter, CancellationToken cancellationToken = default)

Parameters

filter PersistedGrantFilter
cancellationToken CancellationToken

Returns

Task

RemoveAsync(string, CancellationToken)

Removes a grant by key.

public Task RemoveAsync(string key, CancellationToken cancellationToken = default)

Parameters

key string
cancellationToken CancellationToken

Returns

Task

StoreAsync(PersistedGrant, CancellationToken)

Stores a grant.

public 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.

public 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.

public 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.