Gen*_* S. 5 youtube oauth oauth-2.0
我有一个应用程序将视频上传到YouTube到特定的YouTube频道(意思是,不是任何个人用户的频道,而是单个频道,我有用户名和密码).
在ClientLogin中,我的服务器端进程为YouTube提供了U/P,一切都在前进.但是,这已被弃用,我正在寻求升级到OAuth 2.0(根据他们的建议),但是,文档坚持存在重定向URI,用于用户登录时.它似乎没有解释如何绕过用户登录(因为用户没有任何东西可以登录,或任何凭据登录*...应用程序旨在获取他们的视频并将其上传到我们的频道).所以,我需要的是绕过用户被问到的任何东西,并让YouTube简单地获取我的频道凭据并给我回复令牌以供我上传.
我意识到这是一个完全标准且无争议的程序,因此我必须遗漏一些明显的东西,但我无法理解那是什么.
所以,我的问题是,如何跳过用户对话框 - >重定向,只是为youtube提供凭据,让它接受然后在OAuth 2.0中上传我的视频?
我真正想要的是遵循DirectUpload方法:https: //developers.google.com/youtube/2.0/developers_guide_protocol#AuthSub_Authentication_Flow 并在幕后默默检索用户令牌.
TIA
真的没有办法(我发现)完全绕过访问外部页面来授权OAuth2.0访问.我最接近的是在code.google.com/apis/console上创建一个"已安装的应用程序"项目,并使用设备方法.您将收到客户端ID和客户端密钥.这些将在以后使用.理想情况下,您会生成一个开发人员密钥,但我目前不相信这是通过code.google.com/apis/youtube/dashboard/
我对标题和响应使用JSON表示法,它应该很容易适应您选择的语言.
首先使用标题向accounts.google.com/o/oauth2/device/code发送POST请求
{
'Content-Type': 'application/x-www-form-urlencoded',
'Content-Length': post_data.length,
'X-GData-Key': 'key=YOUR_DEVELOPER_KEY'
}
Run Code Online (Sandbox Code Playgroud)
并且数据包含:
{
client_id: 'YOUR_CLIENT_ID',
scope: 'https://gdata.youtube.com'
}
Run Code Online (Sandbox Code Playgroud)
其中YOUR_CLIENT_ID是您为之前设置的google apis项目获取的客户ID.
你会得到这样的回复:
{
"device_code" : "4/Pj8m71w5XuEMTT0ZwOJVgvlTfF4Q",
"user_code" : "5wtw67wm",
"verification_url" : "http://www.google.com/device",
"expires_in" : 1800,
"interval" : 5
}
Run Code Online (Sandbox Code Playgroud)
如果您未在30分钟内访问www.google.com/device(由"verification_url"字段定义)(每个"expires_in"响应字段为1800秒),则必须再次执行此第一个请求.在www.google.com/device页面上,如果您尚未登录,则会要求您登录,然后输入验证码(由"user_code"响应字段定义).系统会向您显示授权应用程序的请求以及应用程序请求的权限列表.您希望(至少暂时)存储"device_code"字段的值.这将在请求访问令牌和刷新令牌时使用.
现在已经授予了权限,我们可以请求访问/刷新令牌对.只有存储刷新令牌时才需要这样做.要请求访问/刷新令牌对,您必须向accounts.google.com/o/oauth2/token发送POST请求,其中包含标题
{
'Content-Type': 'application/x-www-form-urlencoded',
'Content-Length': post_data.length,
'X-GData-Key': 'key=YOUR_DEVELOPER_KEY'
}
Run Code Online (Sandbox Code Playgroud)
和数据
{
client_id: 'YOUR_CLIENT_ID',
client_secret: 'YOUR_CLIENT_SECRET',
code: 'YOUR_DEVICE_CODE',
grant_type: 'http://oauth.net/grant_type/device/1.0'
}
Run Code Online (Sandbox Code Playgroud)
响应将如下所示
{
"access_token" : "YOUR_ACCESS_TOKEN",
"token_type" : "Bearer",
"expires_in" : 3600,
"refresh_token" : "YOUR_REFRESH_TOKEN"
}
Run Code Online (Sandbox Code Playgroud)
这指定访问令牌在3600秒(60分钟)内到期以及当前访问令牌是什么以及刷新令牌是什么.您希望存储用于当前会话的访问令牌以及用于将来会话的刷新令牌.
在发出API请求时,您需要在Authorization标头字段中包含访问令牌,并且包括我们一直以来的开发人员密钥.要上传视频,我使用了以下标题:
{
'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'
}
Run Code Online (Sandbox Code Playgroud)
您可以随时刷新访问令牌,而不仅仅是旧签名到期时.要刷新访问令牌,请向accounts.google.com/o/oauth2/token发送带有标头的POST请求
{
'Content-Type': 'application/x-www-form-urlencoded',
'Content-Length': post_data.length,
'X-GData-Key': 'key=YOUR_DEVELOPER_KEY'
}
Run Code Online (Sandbox Code Playgroud)
和数据
{
client_id: 'YOUR_CLIENT_ID',
client_secret: 'YOUR_CLIENT_SECRET',
refresh_token: 'YOUR_REFRESH_TOKEN',
grant_type: 'refresh_token'
}
Run Code Online (Sandbox Code Playgroud)
你会得到这样的回复
{
"access_token" : "YOUR_NEW_ACCESS_TOKEN",
"token_type" : "Bearer",
"expires_in" : 3600
}
Run Code Online (Sandbox Code Playgroud)
其中YOUR_NEW_ACCESS_TOKEN是您在将来的请求中使用的新令牌.
| 归档时间: |
|
| 查看次数: |
2730 次 |
| 最近记录: |