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);
        }