Раздражающие неверные учетные данные с помощью oauth 2.0 google + api

StackOverflow https://stackoverflow.com/questions/7801670

Вопрос

Я пытаюсь использовать oauth 2.0 для API Google + на своем сайте, и я продолжаю получать:

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

Дело в том, что я не знаю, почему это происходит.У меня есть действительный токен доступа от Google, но Google сообщает, что он недействителен.Я знаю, что срок действия токена не истек, поскольку данные json запрашиваются у Google в течение 10 секунд после получения токена доступа.Вот процесс, который я использую:

  1. Попросите пользователя авторизовать запрос.
  2. Получает код запроса от Google.
  3. Использование cUrl запросить токен доступа с кодом запроса от Google.
  4. Помещает код доступа в сеанс php.
  5. перенаправляет обратно на главную страницу.
  6. Главная страница обнаруживает, что переменная сеанса установлена, и не отображает ссылку для входа.
  7. Php на главной странице использует readFile чтобы получить ответ в формате JSON от Google.
  8. Google возвращает неверные учетные данные.

вот пример uri, сгенерированного php, который вставляется в readFile:

https://www.googleapis.com/plus/v1/people/me?prettyprint=true&access_token=ya29.AHES6ZQRGovDa5FHsojU3qCM1DEnYmJPywz1muUE4CWGH5n70OcAkw

Помоги пожалуйста?

Это было полезно?

Решение

Вы пробовали один из клиентов Google API?Существуют стартовые приложения, которые вы можете использовать, чтобы начать работу.

https://developers.google.com/+/downloads

Другие советы

Вы не должны делиться неизмененным токеном доступа — кто-то может использовать его, чтобы выдать себя за вас (на самом деле для того, кому он был предоставлен).

Также лучше передать токен аутентификации в виде заголовка, например:

curl -H "Authorization: OAuth ya29.xyzxyz" "https://www.googleapis.com/plus/v1/people/me"

Не уверен, что это важно, но ваше сообщение об ошибке, похоже, указывает на ошибку аутентификации в заголовке, поэтому вы можете предоставить заголовок авторизации, который не соответствует тому, который вам нужен.

Вот решение с использованием PHP пекл oauth расширение.Он подпишет запрос так, как вы его определили.В данном случае в объекте json файла конфигурации, который был импортирован в скрипт.

        $oauth = new OAuth($this->config->consumer_key, $this->config->consumer_secret, $this->config->signature_method, $this->config->auth_type);
        $oauth->setVersion($this->config->version);
        $oauth->setToken($accessToken->oauth_token, $accessToken->oauth_token_secret);

        $params = array(
            'fields' => 'displayName,emails,id,image,name',
            'pp' => 1
        );

        $oauth->fetch('https://www.googleapis.com/plus/v1/people/me', $params, OAUTH_HTTP_METHOD_GET);

        // extract response
        $json = Zend_Json::decode($oauth->getLastResponse(), Zend_Json::TYPE_OBJECT);

У меня была эта проблема раньше, но с твиттером.

Фактически, для OAuth мы связываемся с твиттером дважды: сначала для получения токена запроса, затем для авторизации отправки первого уже подписанного токена.Возможно, вы преодолели только 1-й.

Я получаю ту же ошибку 401 «Неверные учетные данные» в течение нескольких часов.Затем я заметил, что сохранил свой access_token в базе данных в поле VARCHAR(50).Он отрезал часть access_token.Я увеличил длину столбца.ЗАФИКСИРОВАННЫЙ.

Дважды проверьте длину поля в базе данных, где вы храните свой access_token, а также свойrefresh_token!

я думаю me API сломан.Проблема исчезла, когда я попытался запросить URI с реальным идентификатором пользователя.Я имею в виду вот так: https://www.googleapis.com/plus/v1/people/108189587050871927619?key={your_api_key}

Удалите свой токен.json файл, а затем повторите запрос.

Проблемой для меня был заголовок «Авторизация» в запросе GET/POST:

В документации Google сказано:Авторизация:/* Здесь токен OAuth 2.0 */

Но правильно:Авторизация:OAuth /* Токен OAuth 2.0 здесь */

Да!включите «OATH» перед ключом-токеном!

Если вы используете cURL (PHP), используйте:

curl_setopt($ch, CURLOPT_HTTPHEADER, array('Authorization: OAuth '.$_SESSION['access_token'], 'Content-Type: application/json'));
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top