[PHP] Ошибка 401 токен недействителен при использовании Google Api OAUT Access токен - PullRequest
1 голос
/ 10 февраля 2011

После получения токена доступа я хотел бы использовать его для чтения защищенных данных (например, контактов). Но в ответ на запрос я получаю
Token invalid - Invalid AuthSub token.<br> Error 401

Я сравнил параметры, которые отправляю, с OAuth Playground, и между ними нет никакой разницы (кроме отметки времени, одноразового номера и подписи, которая понимает). Мои заголовки выглядят так:
Content-Type: application/atom+xml<br> Authorization: OAuth oauth_parameters

Есть идеи, что может пойти не так?

1 Ответ

1 голос
/ 27 мая 2011

Я не правильно настроил СЕССИЮ, поэтому фактически использовал токен запроса с секретом вместо токена доступа: 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.Пожалуйста, не стесняйтесь задавать мне любые вопросы, Рафаль.

...