[PHP] Ошибка 401 токен недействителен при использовании Google Api OAUT Access токен
После получения токена доступа я хотел бы использовать его для чтения защищенных данных (например, контактов). Но в ответ на запрос я получаюToken invalid - Invalid AuthSub token.
Error 401
Я сравнил параметры, которые отправляю, с OAuth Playground, и между ними нет никакой разницы (кроме отметки времени, одноразового номера и подписи, которая понимает).
Мои заголовки выглядят так:Content-Type: application/atom+xml
Authorization: OAuth oauth_parameters
Есть идеи, что может пойти не так?
1 ответ
Я не установил сессию должным образом, поэтому я использовал токен запроса с секретом вместо токена доступа: P
if(empty($_GET["oauth_token"])) {
$_SESSION["token_secret"] = $oauthTokenSecret;
$_SESSION["oauth_token"] = $oauth_token;
echo '<script>window.location="'.$auth_url.'";</script>';
}
else {
$oauth_token->key = urldecode($_GET["oauth_token"]);
$oauth_token->secret = $_SESSION["token_secret"];
echo "<Br>";
echo "<Br> FIRST OAUTH TOKEN: ";
echo $oauth_token->key;
echo "<Br>";
echo "<Br> FIRST OAUTH TOKEN SECRET: ";
echo $oauth_token->secret;
print_r($_SESSION);
echo "<Br>";
echo "<Br>";
// GET https://www.google.com/accounts/OAuthGetAccessToken
$req = OAuthRequest::from_consumer_and_token($consumer, $oauth_token, 'GET',
$token_endpoint.'OAuthGetAccessToken', array('oauth_verifier' => $_GET['oauth_verifier']));
$req->sign_request($sig_method, $consumer, $oauth_token, $privKey);
print_r($req);
$response = send_signed_request('GET', $token_endpoint.'OAuthGetAccessToken', array($req->to_header()));
@Rafal - я бы позаботился о том, чтобы вы приобрели 2 отдельных токена (один для первоначального запроса и один для доступа). Еще одна вещь, на которую следует обратить внимание, это то, что важно перестроить новую подпись с новым токеном / секретом, потому что он возвращал "Недопустимую подпись", если вы сохраняете ее прежней.
Поскольку во время этого процесса происходит необходимое перенаправление, вы должны хранить начальный токен в секрете в переменной SESSION. Oauth_token будет возвращен в URL после того, как пользователь вернется в ваше приложение, но секрет токена не будет. Вы должны сохранить его в переменной, к которой вы можете получить доступ после завершения обхода.
Если вы хотите сохранить весь объект oauth_token в сеансе, убедитесь, что вы создали экземпляр объекта ДО вашего "session_start ()"
$oauth_token = new OAuthToken($oauthToken, $oauthTokenSecret);
session_start();
В противном случае вы получите предупреждение "неполный объект" при перепечатке токена, полученного от SESSION. Я провел много времени в этом проекте, и стал тесно связан с OAuth. Пожалуйста, не стесняйтесь задавать мне любые вопросы, Рафал.