Раздражает недействительные учетные данные с oauth 2.0 Google + API - PullRequest
9 голосов
/ 18 октября 2011

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

{
    "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

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

Ответы [ 7 ]

3 голосов
/ 30 октября 2011

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

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

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

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

2 голосов
/ 09 декабря 2011

Вот решение, использующее расширение PHP pecl 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);
1 голос
/ 20 октября 2011

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

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

0 голосов
/ 10 июня 2018

Для меня проблемой был заголовок "Авторизация" на запросе 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'));
0 голосов
/ 12 февраля 2016

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

0 голосов
/ 01 сентября 2012

Я получаю ту же самую ошибку 401 "Invalid Credentials" в течение нескольких часов.Затем я заметил, что храню свой access_token в базе данных в поле VARCHAR (50).Это отрезало часть access_token.Я увеличил длину столбца.ИСПРАВЛЕНО.

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

0 голосов
/ 18 октября 2011

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

Для OAuth фактически мы общаемся с твиттером дважды, сначала для получения токена запроса, затем для авторизации отправки первого токена, который уже подписан.Может быть, вы преодолели только 1-й.

...