bugfix> node.js > 投稿

アクセストークンを使用して、 APIエンドポイントに投稿するhttps://api.linkedin.com/v1/people/\〜 この後、次のコンテンツを含む401を受け取ります。

Method: POST:
URL: https://api.linkedin.com/v1/people/\~
Error: 
{
  "errorCode": 0,
  "message": "Unable to verify access token",
  "requestId": "C0DUCX81SA",
  "status": 401,
  "timestamp": 1421946470523
}

問題の理解または解決にご協力ください。

回答 3 件
  • 401は不正なリクエストを意味します。

    エラーごとに、アクセストークンを送信していないと思います。 コードを追加して、理解を深めてください。

    更新しました:

    クエリでトークンを送信しており、それが問題の原因です。

    LinkedInは認証ヘッダーを受け入れず、要求パラメーターを予期します。oauth2_access_token

    ヘッダーは次のようになります。

    {
        "oauth2_access_token": "Your_token_here"
    }
    
    

    これがお役に立てば幸いです。

  • アクセストークンをどのように取得していますか? https://developer.linkedin.com/docs/oauth2で概説されている手順に従っていることを確認してください。

    プロファイルAPIに対して認証済みリクエストを行う場合、 Authorization を追加する必要があります  リクエストのヘッダー。

    GET /v1/people/~ HTTP/1.1 Host: api.linkedin.com Connection: Keep-Alive Authorization: Bearer AQXdSP_W41_UPs5ioT_t8HESyODB4FqbkJ8LrV_5mff4gPODzOYR

  • XMLHttpRequestを使用して、クライアントからサーバーにアクセストークンを送信しています

    let xhr = new XMLHttpRequest();
          xhr.open('POST', 'http://localhost:3000/' + url);
          xhr.setRequestHeader('Content-Type', 'application/json');
          xhr.setRequestHeader('token', this.sessionInfo.token);
    
    

    サーバー側のトークンを次のように検証します

    router.route('/auth/linkedin')
        .post(function verifyLinkedinAccessToken(req, res, Ltoken) {
            var Ltoken = req.headers ['token'];
    
            // Authorization: Bearer [Ltoken];
            console.log('LinkedIn token from client ==== ', Ltoken);
            var path =  'https://api.linkedin.com/v1/people/~?oauth2_access_token=' + Ltoken;
            request(path, function (error, response, body) {
                var data = JSON.stringify(body);
                console.log(data);
                if (!error && response && response.statusCode && response.statusCode == 200) {
                    var user = {
                        linkedinUserId: data.id,
                        fullName: data.name
                    };
                    var jtoken = jwt.sign({ linkedinUserId: data.id }, 'twinesoft', { expiresIn: '3h' });
                    res.json(jtoken);  
                }
                else {
                    console.log(data.error);
                }
            });
    
    

    この後、次のコンテンツを含む401を受け取ります。

    {
      "errorCode": 0,
      "message": "Unable to verify access token",
      "requestId": "C0DUCX81SA",
      "status": 401,
      "timestamp": 1421946470523
    }
    
    

あなたの答え