using Duende.IdentityServer; using Duende.IdentityServer.Extensions; using Duende.IdentityServer.Models; using Duende.IdentityServer.Services; using Duende.IdentityServer.Stores; using Duende.IdentityServer.Stores.Serialization; namespace Bit.Identity.IdentityServer; public class AuthorizationCodeStore : DefaultGrantStore, IAuthorizationCodeStore { public AuthorizationCodeStore( IPersistedGrantStore store, IPersistentGrantSerializer serializer, IHandleGenerationService handleGenerationService, ILogger logger) : base(IdentityServerConstants.PersistedGrantTypes.AuthorizationCode, store, serializer, handleGenerationService, logger) { } public Task StoreAuthorizationCodeAsync(AuthorizationCode code) { return CreateItemAsync(code, code.ClientId, code.Subject.GetSubjectId(), code.SessionId, code.Description, code.CreationTime, code.Lifetime); } public Task GetAuthorizationCodeAsync(string code) { return GetItemAsync(code); } public Task RemoveAuthorizationCodeAsync(string code) { // return RemoveItemAsync(code); // We don't want to delete authorization codes during validation. // We'll rely on the authorization code lifecycle for short term validation and the // DatabaseExpiredGrantsJob to clean up old authorization codes. return Task.FromResult(0); } }