通过获取OAuth2.0生成的访问令牌(access token)来调用Google API

1.Google的API调用

(1)前提需要在Google Cloud这个网站上创建一个云项目(project),在云项目下面创建服务账户(Service Acounts)。如图所示。
在这里插入图片描述
(2)新建服务账户
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
(3)获取客户端ID的私有秘密键
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
用下面这个命令在命令行将其转换成jks文件

keytool -importkeystore -srckeystore loyal-theater-418309-e95646f4fd15.p12 -destkeystore des.jks -srcstoretype  pkcs12 -deststoretype JKS

在这里插入图片描述
在这里插入图片描述
以上的文件可以通过KeyStore的load方法加载出来。

通过以上步骤可以完成获取访问令牌(access token)的前提条件。
获取到clientID和privatekey。

该服务账户还没有赋予生成token的权限,所以需要继续添加生成token的角色。

(1)添加生成token的角色
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
(2)指定需要调用的API
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
接着我们就应该通过获得访问令牌来调用对应的API。调用API的URL,官方文档记载比较明确。

这里记载如何在我们的服务器上从Google服务器上获取访问令牌。

我们通过做成JWT的形式来从Google服务器上获取访问令牌(access token)
和Google服务器的通信遵循以下流程。
在这里插入图片描述

JWT header

{"alg":"RS256","typ":"JWT"}

JWT payload

在这里插入图片描述

{
  "iss":"testgettoken@loyal-theater-418309.iam.gserviceaccount.com",
  "scope":"https://www.googleapis.com/auth/playintegrity",
  "aud":"https://accounts.google.com/o/oauth2/token",
  "exp":1328554385,
  "iat":1328550785
}

iss: 在Google Developer Console做成的服务账号即clientID。 
     xxxxxxxxxxxxxx-xxxxxxxxxxxxxxxxxxxxxxxxxxxx@loyal-theater-418309.iam.gserviceaccount.com的形式 
scope: 将要使用的API所需要对应指定的范围 
aud: 发行访问令牌的目标网址https://accounts.google.com/o/oauth2/token
exp: 访问令牌有效期限。最大一个小时:iat+3600秒
iat: 访问令牌的发行日 (从1970年1月1日00:00:00 到现在为止的UTC的秒数)

上面做成的JWT header+ payload通过秘密键jks文件中的秘密键加密生成署名。生成之后发出以下请求即可得到访问令牌(access token)。

curl -d grant_type=urn:ietf:params:oauth:grant-type:jwt-bearer -d assertion={上面做成的JWT} https://accounts.google.com/o/oauth2/token

但是注意通过上面在服务器上发出请求的话,会有可能出现JWT的署名检证不对情况。

通过上面获得的访问令牌就可以用来调用想访问的API了。

  • 4
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值