protected virtual async Task <AuthenticateResult> UpdateAccountFromExternalClaimsAsync(TKey userID, string provider, string providerId, IEnumerable <Claim> claims)
        {
            var existingClaims = await userManager.GetClaimsAsync(userID);

            var intersection = existingClaims.Intersect(claims, new ClaimComparer());
            var newClaims    = claims.Except(intersection, new ClaimComparer());

            foreach (var claim in newClaims)
            {
                var result = await userManager.AddClaimAsync(userID, claim);

                if (!result.Succeeded)
                {
                    return(new AuthenticateResult(result.Errors.First()));
                }
            }

            return(null);
        }