Токен обновления API Google YouTube не отправляется - PullRequest
7 голосов
/ 26 марта 2012

Я пытаюсь использовать API данных Google YouTube с PHP на основе документации Google, приведенной здесь: https://developers.google.com/youtube/2.0/developers_guide_protocol_oauth2#OAuth2_Refreshing_a_Token. Моя проблема возникает при аутентификации с помощью OAuth. Я использую следующий URL авторизации, который идентичен тому, который, как говорят в документах, я использую, за исключением моего URI перенаправления и ключа приложения, очевидно.

$this->authorizationUrl = 'https://accounts.google.com/o/oauth2/auth?';
$this->authorizationUrl .= 'client_id=' . $this->applicationKey . '&';
$this->authorizationUrl .= 'redirect_uri=' . $this->redirect_uri . '/account.php?action=youtube_oauth&';
$this->authorizationUrl .= 'scope=https://gdata.youtube.com&';
$this->authorizationUrl .= 'response_type=code&';
$this->authorizationUrl .= 'access_type=offline';

Затем, как говорят документы, я свернул следующее:

$curl_options = Array(
            CURLOPT_POSTFIELDS => Array(
                'code' => $code,
                'client_id' => $this->applicationKey,
                'client_secret' => $this->applicationSecret,
                'redirect_uri' => $this->redirect_uri . '/account.php?action=youtube_oauth',
                'grant_type' => 'authorization_code'
            ),
            CURLOPT_RETURNTRANSFER => true,
            CURLOPT_URL => 'https://accounts.google.com/o/oauth2/token'
        );

Однако, мой ответ никогда не дает мне refresh_token, как написано в их документации. Я просто получил остальные три пункта ответа.

Некоторые вопросы, подобные этому: Получите маркер обновления google api сказал, что он использует Approval_prompt = Force, но это тоже не работает и полностью лишает цель иметь access_type = offline.

Есть идеи, почему я получу действительный ответ с 3 из 4 пунктов ответа?

Ответы [ 2 ]

29 голосов
/ 19 апреля 2012

Из автономного доступа часть документов OAuth2.0:

Когда ваше приложение получает токен обновления, оно важно хранить этот токен обновления для будущего использования. Если твой приложение теряет токен обновления, ему придется повторно запрашивать Пользователь для получения согласия перед получением другого токена обновления. Если тебе надо чтобы повторно запросить у пользователя согласие, укажите approval_prompt параметр в запросе кода авторизации и установите значение force.

Таким образом, когда вы уже предоставили доступ, последующие запросы для grant_type из authorization_code не будут возвращать refresh_token, даже если для access_type было установлено значение offline в строке запроса на странице согласия.

Как указано в приведенной выше цитате, чтобы получить новый refresh_token после его получения, вам нужно будет отправить своего пользователя обратно через приглашение, что можно сделать, установив approval_prompt до force.

Приветствия

PS Это изменение было также объявлено в блоге .

2 голосов
/ 05 апреля 2012

Вы можете попробовать google oauth2 детская площадка (https://code.google.com/oauthplayground/) и посмотреть, в чем разница между вашими параметрами и там.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...