3

Twitch TV アカウントを自分の Web サイトのユーザー プロフィールに接続しようとすると、403 Forbidden エラーが発生します。ここで指定された認証コード フローを使用しようとしています: https://github.com/justintv/Twitch-API/blob/master/authentication.md#auth-codeしかし、Twitch TV にポストバックする必要がある 2 番目の部分エラーが発生する場所です。私はこれを ASP.net MVC3 と C# で行っています。

コードを取得し、アプリケーションに twitch TV へのアクセスを許可するようにユーザーに依頼する方法を次に示します (これは期待どおりに機能します)。

  [Authorize]
  public ActionResult TwitchTvLogOn(string returnUrl)
  {
     string redirectUrl = "";

     // This is special code used to determine the URL that will be used when working in UGDB since the URL is different in 
     // development than it is in production.
     #if (DEBUG)
        redirectUrl = "http://localhost:58386/Account/AuthorizeTwitchTv";
     #else
        redirectUrl = "http://www.mywebsite.com/Account/AuthorizeTwitchTv";
     #endif

     var loginUri = "https://api.twitch.tv/kraken/oauth2/authorize?response_type=code&client_id=" +
                    System.Configuration.ConfigurationManager.AppSettings["TwitchClientId"] +
                    "&redirect_uri=" + redirectUrl + "&state=" + returnUrl;

     return Redirect(loginUri);
  }

これは、正しく機能していない部分であり、403 が表示されます。

  public ActionResult AuthorizeTwitchTv(string code, string state)
  {
     string currentUrl = Request.Url.AbsoluteUri;
              string redirectUrl = "";

     #if (DEBUG)
        redirectUrl = "http://localhost:58386/Account/AuthorizeTwitchTv";
     #else
        redirectUrl = "http://www.mywebsite.com/Account/AuthorizeTwitchTv";
     #endif

     var twitchTvPost = "https://api.twitch.tv/kraken/oauth2/token?client_id=" +
                             System.Configuration.ConfigurationManager.AppSettings["TwitchClientId"] + "&client_secret=" +
                             System.Configuration.ConfigurationManager.AppSettings["TwitchAppSecret"] + "&grant_type=authorization_code&redirect_uri=" + 
                             redirectUrl + "&code=" + code;

     ASCIIEncoding encoding = new ASCIIEncoding();
     string postData = "client_id=" + System.Configuration.ConfigurationManager.AppSettings["TwitchClientId"];
     postData += ("&client_secret=" + System.Configuration.ConfigurationManager.AppSettings["TwitchAppSecret"]);
     postData += ("&grant_type=authorization_code");
     postData += ("&redirect_uri=" + redirectUrl);
     postData += ("&code=" + code);
     byte[] data = encoding.GetBytes(postData);

     // Prepare POST web request...
     HttpWebRequest myRequest =
       (HttpWebRequest)WebRequest.Create(new Uri("https://api.twitch.tv/kraken/oauth2/token"));
     myRequest.Method = "POST";
     myRequest.ContentType = "application/x-www-form-urlencoded";
     myRequest.ContentLength = data.Length;
     Stream newStream = myRequest.GetRequestStream();
     // Send the data.
     newStream.Write(data, 0, data.Length);
     newStream.Close();

     // Get response  
     HttpWebResponse response = (HttpWebResponse)myRequest.GetResponse();
     // Get the response stream  
     StreamReader reader = new StreamReader(response.GetResponseStream());

     // Read the whole contents and return as a string  
     string result = reader.ReadToEnd();


     return View();
  }

どんな助けでも大歓迎です。全体的な最終目標は、「access_token」を取得して、それを使用して現在のユーザーの twitch ユーザー名を取得し、そのユーザーのチャンネルとフィードを取得できるようにすることです。

4

1 に答える 1

1

私はこれがあまり得意ではありませんが、サーバーポートを介して自分のコンピューターであるlocalhostに接続しようとしていることが問題だと思います。これが問題ではなく、これが必要な場合。ポートフォワーディングについて考えましたか?

于 2013-06-09T17:28:22.620 に答える