[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. Пожалуйста, не стесняйтесь задавать мне любые вопросы, Рафал.

Другие вопросы по тегам