我曾经遇到了完全相同的问题,无论我尝试什么方法都不能使用
DotNetOpenAuth
来解决。使用
DotNetOpenAuth
时,与 Facebook 或 Google+ 相比,Twitter 的身份验证过程更加困难。经过多个令人沮丧的小时,加密和编码数据的各个部分多次变换,并始终收到没有帮助的 401 未经授权错误后,我将
Tweetsharp 加入其中,并为 Twitter 认证创建了我自己的
IAuthenticationClient
。使用
Tweetsharp
执行认证相当简单。只需要执行以下操作即可轻松完成认证:
在您的 TwitterClient
构造函数中:
var twitterService = new TwitterService(consumerKey, consumerSecret)
在您实现的中:
public void RequestAuthentication(HttpContextBase context, Uri returnUrl)
{
var requestToken = twitterService.GetRequestToken(returnUrl.AbsoluteUri);
var redirectUrl = twitterService.GetAuthorizationUri(requestToken).AbsoluteUri;
context.Response.Redirect(redirectUrl, true);
}
public AuthenticationResult VerifyAuthentication(HttpContextBase context)
{
var oAuthToken = context.Request.QueryString["oauth_token"];
var oAuthVerifier = context.Request.QueryString["oauth_verifier"];
var requestToken = new OAuthRequestToken { Token = oAuthToken };
var accessToken = twitterService.GetAccessToken(requestToken, oAuthVerifier);
twitterService.AuthenticateWith(accessToken.Token, accessToken.TokenSecret);
var user = twitterService.VerifyCredentials();
var userId = user.Id.ToString();
var extraData = new Dictionary<string, string>
{
{"accesstoken", accessToken.Token},
{"accesstokensecret", accessToken.TokenSecret},
{"id", userId},
{"name", user.Name},
{"username", user.ScreenName},
{"link", user.Url},
};
return new AuthenticationResult(true, ProviderName, userId, user.ScreenName, extraData);
}