4

LinkedIN API で 2 日目と戦っています。トークンを取得しようとするたびに、400 Bad Request が発生します。

これが私のコードです。誰かがこれを手伝ってくれるでしょうか?

public void RequestAuthentication(System.Web.HttpContextBase context, System.Uri returnUrl)
{
    string url = String.Format("https://www.linkedin.com/uas/oauth2/authorization?response_type=code" +
                 "&client_id={0}" +
                 "&scope={1}" +
                 "&state={3}" +
                 "&redirect_uri={2}",this._consumerKey,_scope,HttpUtility.UrlEncode(returnUrl.ToString()),Guid.NewGuid().ToString());
    context.Response.Redirect(url);
}

public AuthenticationResult VerifyAuthentication(System.Web.HttpContextBase context)
{
    //TODO: check CSRF
    string code = context.Request.QueryString["code"];

    string rawUrl = context.Request.Url.OriginalString;
    //From this we need to remove code portion
    rawUrl = Regex.Replace(rawUrl, "&code=[^&]*", "");

    string authUrl = "https://www.linkedin.com/uas/oauth2/accessToken";
    string postData = String.Format("grant_type=authorization_code&code={0}&redirect_uri={1}&client_id={2}&client_secret={3}", code,HttpUtility.UrlEncode(context.Request.QueryString["ReturnUrl"]), _consumerKey, _consumerSecret);

    //WebClient client = new WebClient();
    //var getReq =  client.DownloadString(authUrl + "?" + postData);

    HttpWebRequest webRequest = WebRequest.Create(authUrl + "?" + postData) as HttpWebRequest;
    webRequest.Method = "POST";

    //This "application/x-www-form-urlencoded"; line is important
    webRequest.ContentType = "application/x-www-form-urlencoded";

    webRequest.ContentLength = postData.Length;

    StreamWriter requestWriter = new StreamWriter(webRequest.GetRequestStream());
    requestWriter.Write(postData);
    requestWriter.Close();

    StreamReader responseReader = new StreamReader(webRequest.GetResponse().GetResponseStream());
}

何か考えはありますか?多分誰かが過去に同様に解決しましたか?

4

2 に答える 2

0

これをデバッグしたところです。成功する前に試したことのいくつかを次に示します。どちらが正しいかはわかりませんので、開始する場所が必要な場合に備えて、それらをすべて書き留めておきます。

  • HTTP プロトコル 1.1
  • content-type: application/x-www-form-urlencodedヘッダーを追加する
  • 認証コードの戻りページからの応答を更新しないでください。URLパラメーターのコード($_GET['code']PHP)は明らかに再利用できません(別の回答によると、20秒ごとに期限切れになります)
    • 別の言い方をすれば、承認コードを再利用したりキャッシュしたりしようとせず、できるだけ早くアクセス トークン リクエストに直接入力してください。
  • 別のアプリケーション (SoapUI や Fiddlr など) を使用してエンドポイントをヒットし、それが機能していることを示し、一部のヘッダーをより明確に表示してみてください。
    • そうは言っても、(応答コードだけでなく)応答ヘッダーを見ると役立つ場合があります
  • URL パラメーターとしてではなく、POST コンテンツとしてデータを送信する

400エラーは不正なリクエスト ( 400 BAD リクエスト HTTP エラー コードの意味? ) ではなく、不足しているリソース ( ) を示していることに注意してください404

于 2015-04-07T18:55:41.740 に答える