DotNetOpenAuth Twitter鉴权返回401 Unauthorized
本文关键字:Unauthorized 返回 Twitter DotNetOpenAuth | 更新日期: 2023-09-27 18:09:03
我开始用Twitter把我的头发扯掉,并试图注册一个用户!!我有Facebook, Google, OpenId都工作得很好,只是Twitter是一个痛苦。
当我试图运行我的代码时,我不断得到401未经授权,我的生活无法弄清楚为什么。
我已经创建了一个twitter客户端,并且我正在使用它与InMemoryTokenManager从DotNetOpenAuth示例解决方案。我的Twitter客户端在这里
public class TwitterClient
{
private string UserName { get; set; }
private static readonly ServiceProviderDescription ServiceDescription =
new ServiceProviderDescription
{
RequestTokenEndpoint = new MessageReceivingEndpoint(
"https://api.twitter.com/oauth/request_token",
HttpDeliveryMethods.GetRequest |
HttpDeliveryMethods.AuthorizationHeaderRequest),
UserAuthorizationEndpoint = new MessageReceivingEndpoint(
"https://api.twitter.com/oauth/authorize",
HttpDeliveryMethods.GetRequest |
HttpDeliveryMethods.AuthorizationHeaderRequest),
AccessTokenEndpoint = new MessageReceivingEndpoint(
"https://api.twitter.com/oauth/access_token",
HttpDeliveryMethods.GetRequest |
HttpDeliveryMethods.AuthorizationHeaderRequest),
TamperProtectionElements = new ITamperProtectionChannelBindingElement[] { new HmacSha1SigningBindingElement() },
};
IConsumerTokenManager _tokenManager;
public TwitterClient(IConsumerTokenManager tokenManager)
{
_tokenManager = tokenManager;
}
public void StartAuthentication()
{
var request = HttpContext.Current.Request;
using (var twitter = new WebConsumer(ServiceDescription, _tokenManager))
{
var callBackUrl = new Uri(request.Url.Scheme + "://" + request.Url.Authority + "/Members/TwitterCallback");
twitter.Channel.Send(
twitter.PrepareRequestUserAuthorization(callBackUrl, null, null)
);
}
}
public bool FinishAuthentication()
{
using (var twitter = new WebConsumer(ServiceDescription, _tokenManager))
{
var accessTokenResponse = twitter.ProcessUserAuthorization();
if (accessTokenResponse != null)
{
UserName = accessTokenResponse.ExtraData["screen_name"];
return true;
}
}
return false;
}
}
我在MembersController的构造函数中有以下内容它用正确的凭据实例化InMemoryTokenManager
_tokenManager = new InMemoryTokenManager(ConfigUtils.GetAppSetting("TwitterAppId"), ConfigUtils.GetAppSetting("TwitterAppSecret"));
我的两个动作是
public ActionResult LogonTwitter()
{
var client = new TwitterClient(_tokenManager);
client.StartAuthentication();
return null;
}
public ActionResult TwitterCallback()
{
var client = new TwitterClient(_tokenManager);
if (client.FinishAuthentication())
{
return new RedirectResult("/");
}
// show error
return View("LogOn");
}
错误出现在StartAuthentication()在我的TwitterClient。只要它调用
这一行twitter.Channel.Send(
twitter.PrepareRequestUserAuthorization(callBackUrl, null, null)
);
我得到以下错误
Error occurred while sending a direct message or getting the response.
Inner Exception: The remote server returned an error: (401) Unauthorized.
谁有什么建议?我花了昨天和今天上午的大部分时间来整理这些东西。我尝试过的所有在线示例似乎也得到了401未经授权的回复?是否有一个已知的问题与DotNetOpenAuth和Twitter?任何帮助都非常感谢。
我不记得确切的术语,但你是否在twitter应用程序(以及代码)中设置了一个回调URL ?我最近遇到了类似的问题,即使在本地开发时,我认为您需要设置该值,即使它只是一个占位符