请求access_token流程
1.搭建开发环境
- 申请Google账号
- 登录Google账号,进入创作者工作室。进入直播栏目,打开个人账户直播功能
- 进入google develop console
a. 创建新项目
b. 启用YouTube Data API v3
c. 创建凭据,Oauth 客户端 ID,选择网页客户端。输入名称,重定向URL,点击创建。完成以后就可以获取一个json文件。里面就有需要的secrete_id。保存该json文件,会放入Android 工程中。
2.请求 code
需要的参数:
- client_id
- redirect_uri
- response_type
- scope
其中,client_id是在第一步中创建凭据的时候得到的,向Google 授权服务器发送如下信息则可以获取到code
https://accounts.google.com/o/oauth2/auth?
client_id=1084945748469-eg34imk572gdhu83gj5p0an9fut6urp5.apps.googleusercontent.com&
redirect_uri=http%3A%2F%2Flocalhost%2Foauth2callback&
scope=https://www.googleapis.com/auth/youtube&
response_type=token
使用浏览器访问到上面的网址,点击确认授权以后,则可以获取一段
code=code=4/v6xr77ewYqhvHSyW6UJ1w7jKwAzu
3.请求access token
通过向Google发送post 请求,来获得access token
https://accounts.google.com/o/oauth2/token
需要的参数:
- code
- client_id
- cilent_secret
- redirect_uri
- grant_type
实际的请求大概像这样:
POST /oauth2/v4/token HTTP/1.1
Host: www.googleapis.com
Content-Type: application/x-www-form-urlencoded
code=4/v6xr77ewYqhvHSyW6UJ1w7jKwAzu&
client_id=8819981768.apps.googleusercontent.com&
client_secret=your_client_secret&
redirect_uri=https://oauth2.example.com/code&
grant_type=authorization_code
如果成功以后,我们会收到JSON格式的Response:
{
"access_token": "ya29.GlvbA3LIk7eIVWpXQJAhqcm3yCKxy7Fopilxm9ft5rXQwxKqBy9Xfno8Jz8DKBBtT3N2DFQ2SHVZ-POLJZaNDE6Ricz12EI-qoVTwSV12A0pD2bwLBxBcnNTGXKm",
"expires_in": 3599,
"refresh_token": "1/20S52RHS3KSqbbiHzuHENaINOwIPZToRycITjlEUX0s",
"token_type": "Bearer"
}
至此我们就可以使用access_token来进行后续的操作了。
4.使用refresh token来刷新access token
当access_token失效的时候,我们需要通过refresh_token来重新获取。发送HTTP POST请求:
https://www.googleapis.com/oauth2/v4/token
需要的参数:
- refresh_token
- client_id
- client_secret
- grant_type
发送请求的格式如下:
POST /oauth2/v4/token HTTP/1.1
Host: www.googleapis.com
Content-Type: application/x-www-form-urlencoded
client_id=8819981768.apps.googleusercontent.com&
client_secret=your_client_secret&
refresh_token=1/6BMfW9j53gdGImsiyUH5kU5RsR4zwI9lUVX-tqf8JXQ&
grant_type=refresh_token
请求成功之后,会多的JOSN格式的Response,如下:
{
"access_token": "ya29.GlvbA2Pfz3-egAlzdN6b5ZLOvfDhrcyiHwLkxGQbj11rjEzD9XH5bCEijQF6Lr4x1oTd76fT-dVXv1B1afkIh5_SAkBiCNtJ8krQwesgSWX9zmiqUZuapzZTWIHy",
"token_type": "Bearer",
"expires_in": 3600
}
因为服务器对refresh_token的请求有限制,如果过多的请求会导致请求失败的情况。所以需要长期保存refresh_token,只要refresh_token没有失效,就没有必要多次请求。