public async override Task RemoveClaimsAsync(ApplicationUser user, IEnumerable <Claim> claims, CancellationToken cancellationToken = default(CancellationToken))
        {
            cancellationToken.ThrowIfCancellationRequested();
            ThrowIfDisposed();

            ValidateParameters(user, claims);

            var auditableObjs = new AuditableObjects <ApplicationUserClaim>();

            foreach (var claim in claims)
            {
                var matchedClaims = await Context.Set <ApplicationUserClaim>().Where(uc => uc.UserId.Equals(user.Id) && uc.ClaimValue == claim.Value && uc.ClaimType == claim.Type).ToListAsync(cancellationToken);

                foreach (var userClaim in matchedClaims)
                {
                    Context.Set <ApplicationUserClaim>().Remove(userClaim);

                    auditableObjs.AddObject(userClaim.Id.ToString(), userClaim);
                }
            }

            if (auditableObjs.Any() && !user.IsSystemUser)
            {
                await auditTrailProvider.AddTrailsAsync(AuditOperation.Delete, userPrincipalBuilder.UserPrincipal.UserName, auditableObjs);
            }
        }