这两天在做一个项目,但是一直卡在google权限认证无法通过,虽然知道国内用googlesheets或者google服务的并不多,但是实在是不想其他人复制我的心酸历程了,能帮到一些算一些吧。
遇到的问题
- credentials_service_account() trying credentials_service_account() 错误: parse error: premature EOF (right here) ------^
- Error in curl::curl_fetch_memory(url, handle = handle) : OpenSSL SSL_connect: 连接被对方重设 in connection to sheets.googleapis.com:443
- Warning: Error in : Can’t get Google credentials. Are you running googlesheets4 in a non-interactive session?
- gargle::oauth_app_from_json(path=’.json’) 错误: Can’t find ‘client_id’ and ‘client_secret’ in the JSON
以上这一连串的问题全都是因为,google没有成功认证。不过各自有各自的子问题。
本机环境
环境 | 具体信息 | 是否和问题相关 |
---|---|---|
系统 | Ubuntu 20.04 | 无关 |
使用的语言 | R | 无关 |
需要使用的服务 | google认证 | 有关 |
所在地 | 大陆 | 有关 |
解决方案
先说结论,出现google认证失败这类错误,首先我默认你已经开了cross the wall软件,但是我们需要的是V****N工具,不是SS,所以你下载一个V*****N工具就可以解决这个问题了。
回到问题本身,如果我们想用google的服务,首先需要通过google的身份认证。
身份认证有两种方式
- 第一种是使用json文件进行无交互式认证,这种方式直接从文件中加载身份信息。
其中,JSON文件分两种
- Service account token:
这种文件的内容是
{
"type": "service_account",
"project_id": "some-project",
"private_key_id": "123456ffff123456",
"private_key": "-----BEGIN PRIVATE KEY-----\nrandomlongRSAstringofletters\n-----END PRIVATE KEY-----\n",
"client_email": "[email protected]",
"client_id": "1234566",
"auth_uri": "https://accounts.google.com/o/oauth2/auth",
"token_uri": "https://oauth2.googleapis.com/token",
"auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs",
"client_x509_cert_url": "https://www.googleapis.com/robot/v1/metadata/x509/project-name%40some-project.iam.gserviceaccount.com"
}
- OAuth App:
这种文件的内容是:
{
"web": {
"client_id": "1234567.apps.googleusercontent.com",
"project_id": "some-project",
"auth_uri": "https://accounts.google.com/o/oauth2/auth",
"token_uri": "https://oauth2.googleapis.com/token",
"auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs",
"client_secret": "aSeriesOfCode"
}
}
回去看报错信息4,其实就是将OAuth将service account弄混了。如果修改好了之后还没好,那就继续看我写的第二钟。
PS:JSON文件的申请方式:service account
- 第二种是交互式认证,启动之后,弹出一个网页让你登录自己的google账号,再按照他的指示操作。
如果操作结束之后,网页显示权限认证完成,返回到程序后控制台却无反应过一阵却加载出了超时,或者单纯的无信息之后提示认证失败(我提示超时是因为我在R中开启了debug模式)。原因基本就锁定在了网络上面,将你的SS工具更换成V*****N工具,大部分的问题都会解决了。
PS: 交互式认证的token保存方法 针对R语言
PS2: 如果你的JSON文件认证失败,他会直接弹出一个oAuth网页,所以在你看到弹出网页的一刻就知道自己这个没搞对。
如果问题还是没解决,拿我自己的问题来举例,我想用的是google sheets, 可是按照上面的json教程,我开的是google drive的api,认证还是依然过不去。是因为除此之外,google sheets的api也是应该被enable的。打开googlesheets的api后,等个一分钟再重新认证就好了。
如果想知道更多关于cross the wall工具之间的差异,这篇文章说的很好:浅谈v*****n、vps、Proxy以及shadowsocks之间的联系和区别 点开之后的第三篇文章(链接里有v*******n过不了审核:)))))))
参考资料:
- https://github.com/tidyverse/googlesheets4/issues/27#issuecomment-507011452
这个commit的信息十分有帮助(对于R使用者来讲)