Google+ API 401 Неверные учетные данные

Я пытаюсь использовать API Google+ для доступа к Google Диску через веб-приложение с использованием javascript. Я всегда получаю ошибку 401 Invalid Credentials, даже если у меня есть действующий токен доступа, срок действия которого еще не истек (подтверждено на https://www.googleapis.com/oauth2/v1/tokeninfo?access_token=MY_ACCESS_TOKEN), я также включил Drive API и не отозвал доступ к токену. Кроме того, я дважды проверил, и токен доступа определенно отправляется в заголовке авторизации (я просматривал запрос через отладчик своего браузера). Из того, что я исследовал, это основные причины ошибки 401 Invalid Credentials. Однако я все еще получаю эти ошибки и не могу понять, почему. Вот мои файлы, из которых я удалил client_id и api_key.

Javascript:

var SCOPES = ['https://www.googleapis.com/auth/plus.login','https://www.googleapis.com/auth/drive'];
var CLIENT_ID = 'MY_CLIENT_ID';
var API_KEY = 'MY_API_ID';


function load()
{
  console.log("load");
  gapi.client.setApiKey(API_KEY);
  window.setTimeout(checkAuth,1);

}

function checkAuth() {

    console.log('checkAuth');
    gapi.auth.authorize({client_id: CLIENT_ID, scope: SCOPES, immediate: false}, handleAuthResult);

}

 function handleAuthResult(authResult) {


    gapi.client.setApiKey(API_KEY);

    if (authResult && !authResult.error) 
    {
        makeRequest();
    } 

    else 
    {
            alert('error');
    }
  }

function makeRequest()
{

gapi.client.load('drive','v2',function()
{
    var request = gapi.client.request({
        'path': '/drive/v2/about',
        'method': 'GET',


    });
    debugger;
    request.execute(function(response) 
    {

            debugger;


        });

});
}

Мой HTML просто включает соответствующие файлы javascript и вызывает метод загрузки из myScript.

HTML:

<!DOCTYPE html>
<html>
  <head>
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <!-- Bootstrap -->
    <script src="../js/myScript.js"></script>
    <script src="https://apis.google.com/js/client.js"></script>
    <script src="https://apis.google.com/js/plusone.js?onload=load"></script>   
  </head>


  <body>

  </body>
  </html>

Если бы кто-нибудь мог понять, почему я получаю ошибку 401 или как найти дополнительную информацию, это было бы здорово.

РЕДАКТИРОВАТЬ: Как мне создать запрос? Когда я использую

var request = gapi.client.request({
        'path': '/drive/v2/about',
        'method': 'GET',


    });

Я вижу, что заголовок авторизации правильный. Однако в учебных пособиях, которые я видел, они используют:

  var request = gapi.client.drive.about.get({}); 

В котором запрос выглядит иначе в отладчике моего браузера и не обязательно содержит правильный заголовок авторизации.


person user2784790    schedule 16.09.2013    source источник


Ответы (2)


Я помню некоторые проблемы, когда предоставление как ключа API, так и токена доступа вызывало проблемы с некоторыми вызовами API. Поскольку ключ API не требуется при вызове аутентифицированных методов, можете ли вы попробовать, работает ли он, если дважды удалите вызовы gapi.client.setApiKey(API_KEY); (которые есть в вашем коде, но это не имеет значения), чтобы узнать, так ли это здесь?

person Scarygami    schedule 16.09.2013
comment
Это решило проблему, не знаю, почему установка ключа api испортит ее. - person user2784790; 17.09.2013
comment
Это проблема в Drive API (и некоторых других API Google). Вот связанная с этим проблема в API Google+, если вы хотите пометить ее для получения обновлений о проблеме: code.google.com/p/google-plus-platform/issues/detail?id=458 - person Scarygami; 17.09.2013

Хотя я на 90% уверен, что то, что предложил Scarygami, решит вашу проблему - удалите setApiKey из checkAuth - рассмотрите еще несколько вещей, которые нужно попробовать, если это не источник проблемы:

  • Пробелы в идентификаторе клиента / секрете клиента
  • Соответствует ли ваш авторизованный источник тому, что вы установили в консоли API Google

Если вы поставите точку останова на

person class    schedule 16.09.2013