4

こんにちは、サイトのユーザーが Twitter でログインできるようにしようとしています。テストできるように、アプリを localhost に登録したいと思います。Twitter がこれを受け入れないため、URL を 127.0.0.1 に変更し、ポート番号も追加してみました。AuthConfig ファイルにシークレットを入力しました。Twitterボタンをクリックするとエラーが発生します

The remote server returned an error: (401) Unauthorized.

次に、iis でアプリを実行して、自分のサイトが自分の Windows Live アカウントでログインできないという問題を修正し始めましたが (その問題は解決されました)、それでもこの Unauthorized エラーが発生します。誰か助けてください。

ありがとうございました

4

2 に答える 2

4

こんにちは、設定の問題であることがわかりました。コールバック URL を指定する必要がありました。私は自分のウェブサイトと同じに設定しました

于 2013-02-10T13:54:23.900 に答える
4

I had exactly the same problem and couldn't solve it with DotNetOpenAuth no matter what I tried. The authentication process for Twitter is far more difficult to get right than either Facebook or Google+ when using DotNetOpenAuth as it comes. After many frustrating hours, encrypting and encoding various parts of the data varying numbers of times and always getting the unhelpful 401 unauthorised, I added Tweetsharp into the mix and created my own IAuthenticationClient for Twitter authentication. It's fairly simple to perform the authentication with Tweetsharp. It becomes a relatively trivial matter of this:

In your TwitterClient constructor:

var twitterService = new TwitterService(consumerKey, consumerSecret);

In your implementation of IAuthenticationClient:

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);
}
于 2013-02-03T19:32:10.890 に答える