Get user's email from Twitter API

First we need to get consumerKey and consumerSecret key from twitter for that we need to create application in twitter by using this link https://dev.twitter.com/apps/new

First we need to get consumerKey and consumerSecret key from twitter for that we need to create application in twitter by using this link https://dev.twitter.com/apps/new

NamesSpaces:
using Newtonsoft.Json;
using Microsoft.AspNet.Identity; using System;
using System.IO;
using System.Net;
using System.Security.Claims;
using System.Security.Cryptography;
using System.Text;

C# Code:

 using System; using System.Web.UI; using System.Xml; using oAuthExample; After completion of adding namespaces write following code in code behind

  public class TwitterIdentityProvider : IdentityProvidersProcessor
    {
        protected override string IdentityProviderName => "Twitter";
        private readonly IAccountRepository _accountRepository;
        public TwitterIdentityProvider(FederatedAuthenticationConfiguration federatedAuthenticationConfiguration, IAccountRepository accountRepository) : base(federatedAuthenticationConfiguration)
        {
            _accountRepository = accountRepository;
        }
        protected override void ProcessCore(IdentityProvidersArgs args)
        {
var accessToken = twitterAppSettings["AccessToken"];
var accessSecret = twitterAppSettings["AccessTokenSecret"];

var options = new TwitterAuthenticationOptions
            {
                //the ConsumerId and the ConsumerSecret
                ConsumerKey = consumerKey,
                ConsumerSecret = consumerSecret,
                Provider = new TwitterAuthenticationProvider
                {
                    OnAuthenticated = context =>
                    {
                        TwitterDto response = oauthLogin(context.AccessToken, context.AccessTokenSecret, consumerKey, consumerSecret);
                        context.Identity.ApplyClaimsTransformations(new TransformationContext(this.FederatedAuthenticationConfiguration, identityProvider));
                        context.Identity.AddClaim(new System.Security.Claims.Claim("urn:twitter:access_token", Settings.GetSetting("Sitecore.Feature.Accounts.Twitter.AccessToken")));
                        context.Identity.AddClaim(new System.Security.Claims.Claim("urn:twitter:access_secret", Settings.GetSetting("Sitecore.Feature.Accounts.Twitter.AccessTokenSecret")));
                        context.Identity.AddClaim(new System.Security.Claims.Claim(ClaimTypes.Email, response.email));
                        CreateUniqueUserName(context);
                        return Task.CompletedTask;
                    },
                    OnReturnEndpoint = (context) =>
                    {
                        return Task.CompletedTask;
                    }
                }

            };
            TwitterAuthenticationExtensions.UseTwitterAuthentication(args.App, options);
        }

public static TwitterDto oauthLogin(string oauth_token, string oauth_token_secret, string oauth_consumer_key, string oauth_consumer_secret)
        {
            // oauth implementation details
            var oauth_version = "1.0";
            var oauth_signature_method = "HMAC-SHA1";

            // unique request details
            var oauth_nonce = Convert.ToBase64String(new ASCIIEncoding().GetBytes(DateTime.Now.Ticks.ToString()));
            var nowUtc = DateTime.UtcNow;
            var timeSpan = nowUtc - new DateTime(1970, 1, 1, 0, 0, 0, 0, DateTimeKind.Utc);
            var oauth_timestamp = Convert.ToInt64(timeSpan.TotalSeconds).ToString();

            var resource_url = "https://api.twitter.com/1.1/account/verify_credentials.json";
            var request_query = "include_email=true";
            // create oauth signature
            var baseFormat = "oauth_consumer_key={0}&oauth_nonce={1}&oauth_signature_method={2}" +
                            "&oauth_timestamp={3}&oauth_token={4}&oauth_version={5}";

            var baseString = string.Format(baseFormat,
                                        oauth_consumer_key,
                                        oauth_nonce,
                                        oauth_signature_method,
                                        oauth_timestamp,
                                        oauth_token,
                                        oauth_version
                                        );

            baseString = string.Concat("GET&", Uri.EscapeDataString(resource_url) + "&" + Uri.EscapeDataString(request_query), "%26", Uri.EscapeDataString(baseString));

            var compositeKey = string.Concat(Uri.EscapeDataString(oauth_consumer_secret),
                                    "&", Uri.EscapeDataString(oauth_token_secret));


            string oauth_signature;
            using (var hasher = new HMACSHA1(Encoding.ASCII.GetBytes(compositeKey)))
            {
                oauth_signature = Convert.ToBase64String(
                    hasher.ComputeHash(Encoding.ASCII.GetBytes(baseString)));
            }
 
            const string headerFormat = "OAuth oauth_nonce=\"{0}\",oauth_signature_method =\"{1}\", " +
                                         "oauth_timestamp=\"{2}\",oauth_consumer_key =\"{3}\", " +
                                         "oauth_token=\"{4}\",oauth_signature =\"{5}\", " +
                                         "oauth_version=\"{6}\"";

            var authHeader = string.Format(headerFormat,
                                           Uri.EscapeDataString(oauth_nonce),
                                           Uri.EscapeDataString(oauth_signature_method),
                                           Uri.EscapeDataString(oauth_timestamp),
                                           Uri.EscapeDataString(oauth_consumer_key),
                                           Uri.EscapeDataString(oauth_token),
                                           Uri.EscapeDataString(oauth_signature),
                                           Uri.EscapeDataString(oauth_version)
                );

         
            ServicePointManager.Expect100Continue = false;
            resource_url += "?include_email=true";
            HttpWebRequest request = (HttpWebRequest)WebRequest.Create(resource_url);
            request.Headers.Add("Authorization", authHeader);
            request.Method = "GET";
            var response = request.GetResponse();
            return JsonConvert.DeserializeObject<TwitterDto>(new StreamReader(response.GetResponseStream()).ReadToEnd());
        }

        public class TwitterDto
        {
        public string name { get; set; }
        public string email { get; set; }
        }

}