public async Task Logout(IOperation operation, IEnumerable <Claim> claims, string refreshToken) { var claimsList = claims.ToList(); var id = AuthenticationUtils.GetUserId(claimsList) ?? throw CommonExceptions.FailedToReadAuthenticationDataFromClaims(operation); var refreshTokenId = await userDataStore.GetRefreshTokenId(operation, id, refreshToken); if (!refreshTokenId.HasValue) { throw CommonExceptions.RefreshTokensAreDifferent(operation); } var identity = GetIdentity(claimsList); identity?.Claims.ToList().ForEach(claim => identity.RemoveClaim(claim)); await userDataStore.RemoveRefreshToken(operation, refreshTokenId.Value); }