Раздражающие неверные учетные данные с помощью oauth 2.0 google + api
-
22-10-2019 - |
Вопрос
Я пытаюсь использовать 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 секунд после получения токена доступа.Вот процесс, который я использую:
- Попросите пользователя авторизовать запрос.
- Получает код запроса от Google.
- Использование
cUrl
запросить токен доступа с кодом запроса от Google. - Помещает код доступа в сеанс php.
- перенаправляет обратно на главную страницу.
- Главная страница обнаруживает, что переменная сеанса установлена, и не отображает ссылку для входа.
- Php на главной странице использует
readFile
чтобы получить ответ в формате JSON от Google. - Google возвращает неверные учетные данные.
вот пример uri, сгенерированного php, который вставляется в readFile:
Помоги пожалуйста?
Решение
Вы пробовали один из клиентов Google API?Существуют стартовые приложения, которые вы можете использовать, чтобы начать работу.
Другие советы
Вы не должны делиться неизмененным токеном доступа — кто-то может использовать его, чтобы выдать себя за вас (на самом деле для того, кому он был предоставлен).
Также лучше передать токен аутентификации в виде заголовка, например:
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'));