Google API 2 на ножках Oauth: «Недопустимый токен - недопустимый токен AuthSub». - PullRequest
1 голос
/ 29 сентября 2011

Я основал свой код на http://gdatatips.blogspot.com/2008/11/2-legged-oauth-in-php.html.

Вот мой код, я хочу работать с API Документа Google (Список документов):

        $endpoint = 'https://www.google.com/accounts/OAuthGetRequestToken';
        $consumer = new OAuthConsumer(GOOGLE_API_DOCLIST_CONSUMER_KEY, GOOGLE_API_DOCLIST_CONSUMER_SECRET, NULL);

        $arrParams = array(
                    'scope' => 'https://docs.google.com/feeds/'
                    ,'xoauth_requestor_id' => GOOGLE_API_DOCLIST_USER_EMAIL
                    );
        $req = OAuthRequest::from_consumer_and_token($consumer, NULL, "GET", $endpoint, $arrParams);
        $req->sign_request(new OAuthSignatureMethod_HMAC_SHA1(), $consumer, null);


        $curl = new Auth_Curl();
        $content = $curl->request($req->to_url());


        $docAPI = new GoogleAPI_DocumentList(new Auth_Curl(), $req->to_header());

        var_dump($req->to_header());
        echo '<br />-- Getting Collections list';

        $url = 'https://docs.google.com/feeds/default/private/full/-/folder' . '?xoauth_requestor_id=' . GOOGLE_API_DOCLIST_USER_EMAIL;
        $raw = $docAPI->getCollectionList($url);
        var_dump($raw);
        die();

Я постоянно получаю:

Неверный токен - Неверный токен AuthSub.

Что я делаю не так?

Edit: Вот несколько «подсказок»:

  • Кажется, они смешивают конечную точку API и базовый канал. Я поставил OAuthGetRequestToken для конечной точки. Похоже, генерирует правильный ответ.
  • Я сохранил его, но я не уверен, что xoauth_requestor_id требуется.
  • Документация говорит нам использовать пробел для разделения параметров в заголовке авторизации. библиотека использует запятую.

1 Ответ

1 голос
/ 30 сентября 2011

Вот исправленный код:

    $endpoint = 'https://docs.google.com/feeds/default/private/full/-/folder';
    $consumer = new OAuthConsumer(GOOGLE_API_DOCLIST_CONSUMER_KEY, GOOGLE_API_DOCLIST_CONSUMER_SECRET, NULL);

    $arrParams = array(
                'xoauth_requestor_id' => GOOGLE_API_DOCLIST_USER_EMAIL
                );
    $req = OAuthRequest::from_consumer_and_token($consumer, NULL, "GET", $endpoint, $arrParams);
    $req->sign_request(new OAuthSignatureMethod_HMAC_SHA1(), $consumer, null);

    $docAPI = new GoogleAPI_DocumentList(new Auth_Curl(), $req->to_header());

    var_dump($req->to_header());
    echo '<br />-- Getting Collections list';

    $url = 'https://docs.google.com/feeds/default/private/full/-/folder' . '?xoauth_requestor_id=' . GOOGLE_API_DOCLIST_USER_EMAIL;
    $raw = $docAPI->getCollectionList($url);
    var_dump($raw);
    die();
  • API и EndPoint не были смешаны.В OAuth v1.0 вы не просите сервер генерировать токен, который будет использоваться в заголовке авторизации, заголовок авторизации генерируется на 100% локально.(Я думаю, что в какой-то момент URL используется для визуализации заголовка авторизации)
  • Поскольку вы не генерируете access_token, вам не нужно определять область действия.
  • Убедитесь, что выиметь бизнес-аккаунт
    • Только бизнес-аккаунт позволяет активировать двухстороннюю аутентификацию.
...