使用dotnetopenauth无法通过Twitter进行身份验证

4

您好,我正在尝试为我的网站用户提供使用Twitter登录的功能。 我想在本地主机上注册我的应用程序以进行测试。 由于Twitter不接受此操作,因此我将URL更改为127.0.0.1并添加了端口号。 我已在AuthConfig文件中输入了我的secrets。 当我单击Twitter按钮时,出现以下错误:

远程服务器返回错误:(401)未经授权。

然后,我开始在iis上运行我的应用程序,以解决我的网站无法使用Windows Live帐户登录的问题(这解决了该问题),但我仍然遇到了身份验证错误。 求助!

谢谢


1
我与这个项目无关,但它似乎是 DotNetOpenAuth 的一个不错的替代品(WorldDomination.Web.Authentication)。 - Chase Florell
另外,为了回答你的问题,我们需要“看看代码”。 - Chase Florell
没有任何代码...在auth配置中只有两行:OAuthWebSecurity.RegisterTwitterClient。 - David
2个回答

4
我曾经遇到了完全相同的问题,无论我尝试什么方法都不能使用 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);
}

4

你好,看起来这是一个配置问题。我需要指定一个回调URL。我将其设置为与我的网站相同。


你能分享一下你的代码吗?我已经指定了回调URL,但仍然收到{"远程服务器返回错误:(401) 未授权。"}的错误信息。 - YodasMyDad
@leen3o 你好,我没有代码可以分享,因为这是创建MVC项目时默认提供的标准内容。我建议你更新你的引用,使用NuGet会帮助你解决遇到的问题。 - David

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接