· 7 years ago · Mar 27, 2018, 08:50 AM
1var resource_url = "https://api.twitter.com/1.1/account/verify_credentials.json";
2var postBody = "include_email=true";//
3resource_url += "?" + postBody;
4
5var twitterOptions = new Microsoft.Owin.Security.Twitter.TwitterAuthenticationOptions()
6{
7 ConsumerKey = ConfigurationManager.AppSettings["consumer_key"],
8 ConsumerSecret = ConfigurationManager.AppSettings["consumer_secret"],
9 Provider = new Microsoft.Owin.Security.Twitter.TwitterAuthenticationProvider
10 {
11 OnAuthenticated = (context) =>
12 {
13 context.Identity.AddClaim(new System.Security.Claims.Claim("urn:twitter:access_token", context.AccessToken));
14 context.Identity.AddClaim(new System.Security.Claims.Claim("urn:twitter:access_secret", context.AccessTokenSecret));
15 return Task.FromResult(0);
16 }
17 },
18 BackchannelCertificateValidator = new Microsoft.Owin.Security.CertificateSubjectKeyIdentifierValidator(new[]
19 {
20 "A5EF0B11CEC04103A34A659048B21CE0572D7D47", // VeriSign Class 3 Secure Server CA - G2
21 "0D445C165344C1827E1D20AB25F40163D8BE79A5", // VeriSign Class 3 Secure Server CA - G3
22 "7FD365A7C2DDECBBF03009F34339FA02AF333133", // VeriSign Class 3 Public Primary Certification Authority - G5
23 "39A55D933676616E73A761DFA16A7E59CDE66FAD", // Symantec Class 3 Secure Server CA - G4
24 "‎add53f6680fe66e383cbac3e60922e3b4c412bed", // Symantec Class 3 EV SSL CA - G3
25 "4eb6d578499b1ccf5f581ead56be3d9b6744a5e5", // VeriSign Class 3 Primary CA - G5
26 "5168FF90AF0207753CCCD9656462A212B859723B", // DigiCert SHA2 High Assurance Server C‎A
27 "B13EC36903F8BF4701D498261A0802EF63642BC3" // DigiCert High Assurance EV Root CA
28 }),
29 CallbackPath = new PathString("/twitter/account/ExternalLoginCallback")
30};
31
32 app.UseTwitterAuthentication(twitterOptions);
33
34if (loginInfo.Login.LoginProvider.ToLower() == "twitter")
35 {
36 string access_token = loginInfo.ExternalIdentity.Claims.Where(x => x.Type == "urn:twitter:access_token").Select(x => x.Value).FirstOrDefault();
37 string access_secret = loginInfo.ExternalIdentity.Claims.Where(x => x.Type == "urn:twitter:access_secret").Select(x => x.Value).FirstOrDefault();
38 TwitterDto response = MyHelper.TwitterLogin(access_token, access_secret, ConfigurationManager.AppSettings["consumer_key"], ConfigurationManager.AppSettings["consumer_secret"]);
39 // by now response.email should possess the email value you need
40 }
41
42public static TwitterDto TwitterLogin(string oauth_token, string oauth_token_secret, string oauth_consumer_key, string oauth_consumer_secret)
43 {
44 // oauth implementation details
45 var oauth_version = "1.0";
46 var oauth_signature_method = "HMAC-SHA1";
47
48 // unique request details
49 var oauth_nonce = Convert.ToBase64String(
50 new ASCIIEncoding().GetBytes(DateTime.Now.Ticks.ToString()));
51 var timeSpan = DateTime.UtcNow
52 - new DateTime(1970, 1, 1, 0, 0, 0, 0, DateTimeKind.Utc);
53 var oauth_timestamp = Convert.ToInt64(timeSpan.TotalSeconds).ToString();
54
55 var resource_url = "https://api.twitter.com/1.1/account/verify_credentials.json";
56 var request_query = "include_email=true";
57 // create oauth signature
58 var baseFormat = "oauth_consumer_key={0}&oauth_nonce={1}&oauth_signature_method={2}" +
59 "&oauth_timestamp={3}&oauth_token={4}&oauth_version={5}";
60
61 var baseString = string.Format(baseFormat,
62 oauth_consumer_key,
63 oauth_nonce,
64 oauth_signature_method,
65 oauth_timestamp,
66 oauth_token,
67 oauth_version
68 );
69
70 baseString = string.Concat("GET&", Uri.EscapeDataString(resource_url) + "&" + Uri.EscapeDataString(request_query), "%26", Uri.EscapeDataString(baseString));
71
72 var compositeKey = string.Concat(Uri.EscapeDataString(oauth_consumer_secret),
73 "&", Uri.EscapeDataString(oauth_token_secret));
74
75 string oauth_signature;
76 using (HMACSHA1 hasher = new HMACSHA1(ASCIIEncoding.ASCII.GetBytes(compositeKey)))
77 {
78 oauth_signature = Convert.ToBase64String(
79 hasher.ComputeHash(ASCIIEncoding.ASCII.GetBytes(baseString)));
80 }
81
82 // create the request header
83 var headerFormat = "OAuth oauth_consumer_key="{0}", oauth_nonce="{1}", oauth_signature="{2}", oauth_signature_method="{3}", oauth_timestamp="{4}", oauth_token="{5}", oauth_version="{6}"";
84
85 var authHeader = string.Format(headerFormat,
86 Uri.EscapeDataString(oauth_consumer_key),
87 Uri.EscapeDataString(oauth_nonce),
88 Uri.EscapeDataString(oauth_signature),
89 Uri.EscapeDataString(oauth_signature_method),
90 Uri.EscapeDataString(oauth_timestamp),
91 Uri.EscapeDataString(oauth_token),
92 Uri.EscapeDataString(oauth_version)
93 );
94
95
96 // make the request
97
98 ServicePointManager.Expect100Continue = false;
99 resource_url += "?include_email=true";
100 HttpWebRequest request = (HttpWebRequest)WebRequest.Create(resource_url);
101 request.Headers.Add("Authorization", authHeader);
102 request.Method = "GET";
103
104 WebResponse response = request.GetResponse();
105 return JsonConvert.DeserializeObject<TwitterDto>(new StreamReader(response.GetResponseStream()).ReadToEnd());
106 }
107 }
108
109 public class TwitterDto
110 {
111 public string name { get; set; }
112 public string email { get; set; }
113 }
114
115var twitterCtx = new TwitterContext(authTwitter);
116var verifyResponse = await
117 (from acct in twitterCtx.Account
118 where (acct.Type == AccountType.VerifyCredentials) && (acct.IncludeEmail == true)
119 select acct)
120 .SingleOrDefaultAsync();