public async Task getsessions_on_ticket_store_should_use_session_store() { await _pipeline.LoginAsync("alice"); _pipeline.RemoveLoginCookie(); await _pipeline.LoginAsync("alice"); _pipeline.RemoveLoginCookie(); await _pipeline.LoginAsync("alice"); _pipeline.RemoveLoginCookie(); var tickets = await _ticketService.GetSessionsAsync(new SessionFilter { SubjectId = "alice" }); var sessions = await _sessionStore.GetSessionsAsync(new SessionFilter { SubjectId = "alice" }); tickets.Select(x => x.SessionId).Should().BeEquivalentTo(sessions.Select(x => x.SessionId)); }
/// <inheritdoc/> public async Task RemoveSessionsAsync(RemoveSessionsContext context, CancellationToken cancellationToken = default) { if (context.RevokeTokens || context.RevokeConsents) { // delete the tokens var grantFilter = new PersistedGrantFilter { SubjectId = context.SubjectId, SessionId = context.SessionId, }; if (context.ClientIds != null) { grantFilter.ClientIds = context.ClientIds; } if (!context.RevokeTokens || !context.RevokeConsents) { if (context.RevokeConsents) { grantFilter.Type = IdentityServerConstants.PersistedGrantTypes.UserConsent; } else { grantFilter.Types = OnlyTokenTypes; } } await _persistedGrantStore.RemoveAllAsync(grantFilter); } // send back channel SLO if (context.SendBackchannelLogoutNotification) { // we might have more than one, so load them all var sessions = await _serverSideTicketService.GetSessionsAsync( new SessionFilter { SubjectId = context.SubjectId, SessionId = context.SessionId, }, cancellationToken); foreach (var session in sessions) { await _backChannelLogoutService.SendLogoutNotificationsAsync(new LogoutNotificationContext { SubjectId = session.SubjectId, SessionId = session.SessionId, Issuer = session.Issuer, ClientIds = session.ClientIds.Where(x => context.ClientIds == null || context.ClientIds.Contains(x)) }); } } if (context.RemoveServerSideSession) { // delete the cookies await _serverSideSessionStore.DeleteSessionsAsync(new SessionFilter { SubjectId = context.SubjectId, SessionId = context.SessionId, }, cancellationToken); } }