0

node.jsに、フォームのトークンを返すeveryauth認証を使用するアプリがあります

{ access_token: 'ya29.AHES6ZTlm9qdoFuY9sdpdmFTJISGaQ_69LnW8fszSzPjSCs',
  token_secret:
    { token_type: 'Bearer',
     expires_in: 3600,
     id_token: 'eyJhbGciOisdUzI1NiJ9.eyJpc3MiOiJhY2NvdW50cy5nb29nbGUuY29tIiwiaWQ
iOiIxMTQ0MDU3NTM5MTg1NTk1Mzc3NzciLCJhdWQiOiI0NDcwOTkyNjgzMjAuYXBwcy5nb29nbGV1c2V
yY29udGVudC5jb20iLCJjaWQiOiI0NDcwOTkyNjgzMjAuYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20
iLCJ0b2tlbl9oYXNoIjoicEFXMDBIaUdaSWNRaWMtM09TLU9vQSIsImlhdCI6MTM0NjMyMzQwMiwiZXh
wIjoxMzQ2MzI3MzAyfQ.HUAhg2hdBUB2n1oUFW_9MOxAyr2O7u8GFkShxggTL2o2tBpwIi0_jLIuD1ri
mGkZwdlR5DwjODe4w2w2rLzPpb3YPCeh19zWg7pxP0huqvuVl3cPLXOkWxke46WIH9KNSQbV3oX34GA4
jTvzEV2-HCR_-GhDeG245FTSpxYpTnE',
     refresh_token: '1/Ns-89zzHPbIJlFYXAOCn4dKqxklN4Wc0Og-Gga5XSJA' } }

この時点で、「許可されたリクエスト」(ファイルのリストを取得)を行うにはどうすればよいですか?

私はこの形式でnode-authを使用してみました:

googleOAuth = new OAuth("https://accounts.google.com/o/oauth2/auth",
            "https://accounts.google.com/o/oauth2/token", 
            config.clientID, config.secret, 
            "1.0A", undefined, "HMAC-SHA1");

 googleOAuth.get('https://www.googleapis.com/drive/v2/files/list', token.access_token, token.token_secret.id_token,  function (error, data) {
  if(error){ 
    console.log(error)
  }else{ 
    console.log(data)
  }
}); 

グーグルプロンプトで「アクセスを許可する」をクリックした後、googleOAuth.getはエラーをログに記録します

{"error":{"statusCode":401,"data":"{\n \"error\": {\n  \"errors\": [\n   {\n    \"domain\": \"global\",\n    \"reason\": \"authError\",\n    \"message\": \"Invalid Credentials\",\n    \"locationType\": \"header\",\n    \"location\": \"Authorization\"\n   }\n  ],\n  \"code\": 401,\n  \"message\": \"Invalid Credentials\"\n }\n}\n"}}

get有効なファイルリストを取得するには、リクエストでどの認証を渡す必要がありますか?

2つの認証ライブラリを使用するのは奇妙に思えます。ただし、everyauthを使用して署名付きリクエストを作成する方法はわかりません。「サービスでのログイン」専用のようです。

4

1 に答える 1

0

1)everyauth register users関数で、スコープを更新してgoogleドライブを含めました。

exports.register = function register (everyauth, conf, users) {
  everyauth['google']
    .appId(conf.google.clientID)
    .appSecret(conf.google.secret)
    .scope('https://www.googleapis.com/auth/drive https://www.googleapis.com/auth/userinfo.profile') // ADDED ADDITIONAL SCOPE VALUE HERE
    .findOrCreateUser(function (sess, token, accessTokenExtra, googleUserData) {
      var user = users.find('google', token);
      if (user) {
        return user;
      } else {
        return users.add('google', sess.id, token, accessTokenExtra, googleUserData);
      }
    })
    .redirectPath('/');
};

2)私のリクエストでは、node-oauthを放棄し、アクセストークンをパラメーターとして使用してリクエストを使用しました。

// was googleOAuth.get('http.... etc
request('https://www.googleapis.com/drive/v2/files?access_token= + token.access_token,  function (error, response, body) {
    if(error){
      callback(error, null);
    }else{
      callback(null, data);
    }
});

3)この時点で、401エラーではなく403エラーが返されるようになりました。

欠落しているアクションは、この質問への回答に従って、コントロールパネルでGoogleドライブAPIとGoogleドライブSDKをオンに設定することでしたhttps://stackoverflow.com/a/10370391/1408316

于 2012-08-30T15:37:58.047 に答える