private static ClaimsIdentity CreateIdentity(ClaimsMapper claimsMapper, string authenticationType)
        {
            IList<Claim> claims = new List<Claim>();

            claims.Add(new Claim(ClaimTypes.NameIdentifier, claimsMapper.Id, null, claimsMapper.Issuer, claimsMapper.OriginalIssuer));
            claims.Add(new Claim(ClaimTypes.Email, claimsMapper.Email, null, claimsMapper.Issuer, claimsMapper.OriginalIssuer));
            claims.Add(new Claim(ClaimTypes.GivenName, claimsMapper.FullName, null, claimsMapper.Issuer, claimsMapper.OriginalIssuer));
            claims.Add(new Claim(ClaimTypes.Sid, claimsMapper.Sid, null, claimsMapper.Issuer, claimsMapper.OriginalIssuer));
            claims.Add(new Claim(ClaimTypes.Version, claimsMapper.Version, null, claimsMapper.Issuer, claimsMapper.OriginalIssuer));
            claims.Add(new Claim(ClaimTypeIsVerified, claimsMapper.IsVerified, null, claimsMapper.Issuer, claimsMapper.OriginalIssuer));
            claims.Add(new Claim(ClaimTypeAvatarUrl, claimsMapper.AvatarUrl, null, claimsMapper.Issuer, claimsMapper.OriginalIssuer));

            return new ClaimsIdentity(claims, authenticationType);
        }
        private static AccessToken CreateToken(IOwinContext owinContext, User user, ClaimsMapper claimsMapper)
        {
            var identity = CreateIdentity(claimsMapper, OAuthDefaults.AuthenticationType);
            var ticket = new AuthenticationTicket(identity, CreateProperties(user));
            var context = new AuthenticationTokenCreateContext(owinContext,
                Startup.OAuthOptions.AccessTokenFormat,
                ticket);

            return new AccessToken
            {
                Type = OAuthDefaults.AuthenticationType,
                Value = context.SerializeTicket()
            };
        }