Итак, вот что я сделал, основываясь главным образом на этом
Получить токен доступа токен asp.net личность
Сначала я установил пакет TwitterinviAPI nuget в соответствии с предложением @Mate выше.
Во-вторых, я обновил раздел Twitter ConfigureAuth в StartUp.Auth.cs, добавив в него «Провайдер»
app.UseTwitterAuthentication(new TwitterAuthenticationOptions()
{
ConsumerKey = ConfigurationManager.AppSettings["TwitterConsumerKey"],
ConsumerSecret = ConfigurationManager.AppSettings["TwitterConsumerSecret"],
Provider = new LinqToTwitterAuthenticationProvider(),
BackchannelCertificateValidator = new Microsoft.Owin.Security.CertificateSubjectKeyIdentifierValidator(new[]
{
"A5EF0B11CEC04103A34A659048B21CE0572D7D47", // VeriSign Class 3 Secure Server CA - G2
"0D445C165344C1827E1D20AB25F40163D8BE79A5", // VeriSign Class 3 Secure Server CA - G3
"7FD365A7C2DDECBBF03009F34339FA02AF333133", // VeriSign Class 3 Public Primary Certification Authority - G5
"39A55D933676616E73A761DFA16A7E59CDE66FAD", // Symantec Class 3 Secure Server CA - G4
"add53f6680fe66e383cbac3e60922e3b4c412bed", // Symantec Class 3 EV SSL CA - G3
"4eb6d578499b1ccf5f581ead56be3d9b6744a5e5", // VeriSign Class 3 Primary CA - G5
"5168FF90AF0207753CCCD9656462A212B859723B", // DigiCert SHA2 High Assurance Server CA
"B13EC36903F8BF4701D498261A0802EF63642BC3" // DigiCert High Assurance EV Root CA
}),
});
В-третьих, я добавил класс LinqToTwitterAuthenticationProvider в Model / IdentityModels (хотя вы можете разместить этот код в любом месте)
public class LinqToTwitterAuthenticationProvider : TwitterAuthenticationProvider
{
public const string AccessToken = "TwitterAccessToken";
public const string AccessTokenSecret = "TwitterAccessTokenSecret";
public override Task Authenticated(TwitterAuthenticatedContext context)
{
context.Identity.AddClaims(
new List<Claim>
{
new Claim(AccessToken, context.AccessToken),
new Claim(AccessTokenSecret, context.AccessTokenSecret)
});
return base.Authenticated(context);
}
Наконец, я обновил ExternalLoginCallback в контроллере учетных записей следующим кодом, чтобы получить информацию о пользователе из twitter
else if (string.Equals(loginInfo.Login.LoginProvider, "twitter", StringComparison.CurrentCultureIgnoreCase))
{
// Generate credentials that we want to use
var identity = AuthenticationManager.GetExternalIdentity(DefaultAuthenticationTypes.ExternalCookie);
var access_token = identity.FindFirstValue(LinqToTwitterAuthenticationProvider.AccessToken);
var access_token_secret = identity.FindFirstValue(LinqToTwitterAuthenticationProvider.AccessTokenSecret);
var creds = new TwitterCredentials(ConfigurationManager.AppSettings["TwitterConsumerKey"], ConfigurationManager.AppSettings["TwitterConsumerSecret"],access_token, access_token_secret);
var authenticatedUser = Tweetinvi.User.GetAuthenticatedUser(creds);
email = authenticatedUser.Email;
firstName = authenticatedUser.Name.Substring(0, authenticatedUser.Name.IndexOf(' '));
lastName = authenticatedUser.Name.Substring(authenticatedUser.Name.IndexOf(' ') + 1);
}
Был один маленький GOTCHYA. Электронная почта даже после всего этого была нулевой. Проблема заключалась в том, что в моем приложении для твиттера я не указал URL-адрес конфиденциальности или ToS и, следовательно, не смог проверить опцию на вкладке разрешений, чтобы запросить электронную почту пользователей. Просто дружелюбный FYI.
Надеюсь, это поможет !!