使用HTTP获取 OAuth 2.0 access tokens(Google)

请求access_token流程

这里写图片描述

1.搭建开发环境

  1. 申请Google账号
  2. 登录Google账号,进入创作者工作室。进入直播栏目,打开个人账户直播功能
  3. 进入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没有失效,就没有必要多次请求。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值