Вопрос по – Миграция с YouTube ClientLogin на OAuth 2.0

5

У меня есть приложение, которое загружает видео на YouTube на определенный канал YouTube (т.е. не на канал какого-либо отдельного пользователя, а на один канал, для которого у меня есть имя пользователя и пароль).

В ClientLogin мой серверный процесс предоставил YouTube U / P, и все пошло вперед. Тем не менее, это устарело, и я ожидаю обновления до OAuth 2.0 (согласно их рекомендации), однако, в документации настаивает на том, что существует URI перенаправления, когда пользователь вошел в систему. объясните, как обойти регистрацию пользователя (поскольку пользователю нечего входить в систему или какие-либо учетные данные для входа * с помощью ... приложение предназначено для того, чтобы брать их видео и загружать его на НАШ канал). Итак, мне нужно обойти запрос пользователя, а YouTube просто взять учетные данные моего канала и вернуть мне токен для загрузки.

Я понимаю, что это абсолютно стандартная и не противоречивая процедура, поэтому я * ДОЛЖЕН упустить что-то очевидное, но я просто не могу выяснить, что это такое.

Итак, мой вопрос: как мне пропустить диалог пользователя? & Gt; перенаправить и просто предоставить YouTube учетные данные для его принятия, а затем загрузить мое видео в OAuth 2.0?

Что мне действительно нужно, так это следовать подходу DirectUpload здесь: https://developers.google.com/youtube/2.0/developers_guide_protocol#AuthSub_Authentication_Flow И чтобы получить токен пользователя за кулисами.

ТИА

Ваш Ответ

1   ответ
6

На самом деле нет никакого способа (который я обнаружил) полностью обойти посещение внешней страницы для авторизации доступа OAuth2.0. Самое близкое, что я нашел, - это создать «Установленное приложение». спроектируйте на code.google.com/apis/console и используйте методологию устройства. Вы получите идентификатор клиента и секрет клиента. Они будут использованы позже. В идеале вы должны сгенерировать ключ разработчика, хотя я не думаю, что это требуется в данный момент, через code.google.com/apis/youtube/dashboard/.

Я использую нотацию JSON для заголовков и ответов, их должно быть легко адаптировать к выбранному вами языку.

Сначала сделайте POST-запрос к accounts.google.com/o/oauth2/device/code с заголовками

{
    'Content-Type': 'application/x-www-form-urlencoded',
    'Content-Length': post_data.length,
    'X-GData-Key': 'key=YOUR_DEVELOPER_KEY'
}

и данные, содержащие:

{
client_id: 'YOUR_CLIENT_ID',
scope: 'https://gdata.youtube.com'
}

где YOUR_CLIENT_ID - это идентификатор клиента, который вы получили для проекта Google Apis, который вы создали ранее.

Вы получите ответ, подобный этому:

{
  "device_code" : "4/Pj8m71w5XuEMTT0ZwOJVgvlTfF4Q",
  "user_code" : "5wtw67wm",
  "verification_url" : "http://www.google.com/device",
  "expires_in" : 1800,
  "interval" : 5
}

Если вы не посетите www.google.com/device (определяется полем & quot; verify_url & quot;) в течение 30 минут (1800 секунд на поле ответа "expires_in"), вам придется выполнить этот первый запрос еще раз. На странице www.google.com/device вам будет предложено войти в систему, если вы этого еще не сделали, и затем ввести код подтверждения (определенный в поле ответа & quot; user_code & quot;). Вам будет представлен запрос на авторизацию приложения и список разрешений, которые запрашивает приложение. Вы хотите сохранить (хотя бы временно) значение для & quot; device_code & quot; поле. Это будет использоваться при запросе токена доступа и обновления токена.

Теперь, когда разрешение предоставлено, мы можем запросить пару токенов доступа / обновления. Это должно произойти только один раз, если вы храните токен обновления. Чтобы запросить пару токенов доступа / обновления, необходимо отправить POST-запрос к accounts.google.com/o/oauth2/token с заголовками

{
    'Content-Type': 'application/x-www-form-urlencoded',
    'Content-Length': post_data.length,
    'X-GData-Key': 'key=YOUR_DEVELOPER_KEY'
}

и данные

{
    client_id: 'YOUR_CLIENT_ID',
    client_secret: 'YOUR_CLIENT_SECRET',
    code: 'YOUR_DEVICE_CODE',
    grant_type: 'http://oauth.net/grant_type/device/1.0'
}

Ответ будет выглядеть так

{
  "access_token" : "YOUR_ACCESS_TOKEN",
  "token_type" : "Bearer",
  "expires_in" : 3600,
  "refresh_token" : "YOUR_REFRESH_TOKEN"
}

Это указывает, что срок действия токена доступа истекает через 3600 секунд (60 минут), а также текущий токен доступа и токен обновления. Вы хотите сохранить токен доступа для использования с текущим сеансом и токен обновления для будущих сеансов.

Делая запрос API, вы захотите включить токен доступа в поле заголовка авторизации, а также ключ разработчика, как мы всегда были. Для загрузки видео я использовал следующие заголовки:

{
    'Authorization': 'Bearer YOUR_ACCESS_TOKEN',
    'X-GData-Key': 'key=YOUR_DEVELOPER_KEY',
    'Slug': 'video.mp4',
    'Content-Type': 'multipart/related; boundary="f897a6d"',
    'Content-Length': post_length,
    'Connection': 'close'
}

Вы можете обновить свой токен доступа в любое время, а не только после истечения срока действия старого. Чтобы обновить токен доступа, отправьте POST-запрос на account.google.com/o/oauth2/token с заголовками.

{
    'Content-Type': 'application/x-www-form-urlencoded',
    'Content-Length': post_data.length,
    'X-GData-Key': 'key=YOUR_DEVELOPER_KEY'
}

и данные

{
    client_id: 'YOUR_CLIENT_ID',
    client_secret: 'YOUR_CLIENT_SECRET',
    refresh_token: 'YOUR_REFRESH_TOKEN',
    grant_type: 'refresh_token'
}

Вы получите ответ, подобный этому

{
  "access_token" : "YOUR_NEW_ACCESS_TOKEN",
  "token_type" : "Bearer",
  "expires_in" : 3600
}

где YOUR_NEW_ACCESS_TOKEN - это новый токен, который вы можете использовать в своих будущих запросах.

Есть ли способ связать это с библиотеками .net, например, с объектом Video?

Похожие вопросы