Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-apps-script/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google apps script 将Google插件连接到Google vm实例_Google Apps Script_Google Cloud Platform_Google Drive Api - Fatal编程技术网

Google apps script 将Google插件连接到Google vm实例

Google apps script 将Google插件连接到Google vm实例,google-apps-script,google-cloud-platform,google-drive-api,Google Apps Script,Google Cloud Platform,Google Drive Api,我正在为google drive开发一个附加组件 作为这个附加组件功能的一部分,我想合并一个GoogleVM服务器,对用户的GoogleDrive文件执行一些处理(即,您通过加载项单击一个文件,将带有下载链接的请求发送到服务器,服务器下载该文件,然后最终使用有关该文件的一些有用信息响应该请求)。加载项的应用程序脚本和vm实例都连接到同一个google“项目” 我正在与google的OAuth2.0系统以及如何将附加组件的授权和vm实例连接在一起进行斗争 目前,当用户第一次打开附加组件时,他们会像

我正在为google drive开发一个附加组件

作为这个附加组件功能的一部分,我想合并一个GoogleVM服务器,对用户的GoogleDrive文件执行一些处理(即,您通过加载项单击一个文件,将带有下载链接的请求发送到服务器,服务器下载该文件,然后最终使用有关该文件的一些有用信息响应该请求)。加载项的应用程序脚本和vm实例都连接到同一个google“项目”

我正在与google的OAuth2.0系统以及如何将附加组件的授权和vm实例连接在一起进行斗争

目前,当用户第一次打开附加组件时,他们会像这样进入授权屏幕

一旦他们授权,我的加载项就可以访问所有预期的作用域,包括对google驱动器文件的读取权限

现在我希望我的服务器也能访问它们。不幸的是,我不知道如何做到这一点

我试着简单地请求python中返回的url。虽然请求返回的状态代码为200,但我似乎无法下载该文件

我还研究了python的授权流程(我正在运行一个flask服务器)

如果能澄清这个问题,我将不胜感激。坦率地说,我发现谷歌关于这个问题的文档非常分散和混乱。因此,即使知道正确的查找位置也会非常有帮助

非常感谢

编辑

我正在添加一些附加代码以帮助提供一些清晰性。这是我当前如何从附加模块向服务器发出请求的:

var路由=http://exampleurl.com/process
风险值数据={
“oAuthToken”:ScriptApp.getOAuthToken(),
“stateToken”:ScriptApp.newStateToken().withTimeout(120).createToken(),
“fileId”:e.parameters.fileId,
“文件类型”:e.parameters.fileMimeType
};
变量选项={
'method':'post',
“有效负载”:数据
};
var response=UrlFetchApp.fetch(路由、选项);
此代码成功地将信息发送到运行服务器的vm实例

现在,我需要授权服务器下载
fileId
指定的文件

在开发过程中,我密切关注设置OAuth2.0对驱动器API的访问。以下是两条关键路线:

@app.route('/google/login')
@无缓存
def login():
会话=OAuth2Session(客户端ID、客户端机密、,
范围=授权范围,
重定向\u uri=AUTH\u重定向\u uri)
uri,state=session.create\u authorization\u url(authorization\u url)
flask.session[AUTH_STATE_KEY]=状态
flask.session.permanent=True
return flask.redirect(uri,代码=302)
@app.route('/google/auth')
@无缓存
def google_auth_redirect():
req_state=flask.request.args.get('state',默认值=None,类型=None)
如果请求状态!=flask.session[AUTH\u state\u KEY]:
response=flask.make_response('Invalid state parameter',401)
返回响应
会话=OAuth2Session(客户端ID、客户端机密、,
范围=授权范围,
state=flask.session[AUTH_state_KEY],
重定向\u uri=AUTH\u重定向\u uri)
oauth2_令牌=session.fetch_access_令牌(
访问\u令牌\u URI,
授权(响应=flask.request.url)
session[AUTH\u TOKEN\u KEY]=oauth2\u tokens
返回flask.redirect(基本URI,代码=302)

有没有办法将我从加载项生成的两个令牌插入到Oauth流中?鉴于我需要提供重定向URL,谷歌似乎没有预料到这一设置,这在我的加载项/服务器技术堆栈中没有多大意义。

目前,您可以从应用程序Sc成功发送访问令牌将项目(通过检索)发送到flask服务器

由于您已经获得了访问令牌,因此不需要经历所有OAuth过程(使用应用程序凭据来请求访问令牌、提供用户同意、重定向等)。通过API请求发送访问令牌实际上是OAuth流中的最后一步

您只需要使用令牌来构建服务,服务器就可以访问该文件

使用访问令牌生成服务: 来自GoogleAppClient.discovery导入生成的

导入google.oauth2.credentials
ACCESS_TOKEN=requestBody['oAuthToken']#通过UrlFetch从应用程序脚本获取的数据
creds=google.oauth2.credentials.credentials(访问令牌)
驱动器\服务=构建('drive','v3',凭证=凭据)\构建驱动器服务
使用驱动器服务下载文件: 构建驱动器服务以访问API后,可以使用下载Google文档或其他文件(两个示例都包括一个带有Python示例的选项卡)

注:
  • 如果您还没有这样做,您可能需要这样做
参考:

对两者使用相同的GCP?Hi@TheMaster。我确实将应用程序脚本和vm实例注册到了同一个项目中。不幸的是,我不知道这到底意味着什么。是否有某种令牌可以来回发送?我猜加载项可以发送访问令牌以及下载链接本身?(使用检索?)。能否提供附加代码的相关部分?(授权流程、发送到服务器的信息).Hi@Iamblichus。我已经在我的问题中添加了一个编辑,以提供更多相关代码。就插件的授权过程而言,到目前为止,我所需要做的只是向添加范围。可能相关:这绝对有效。谢谢!我很高兴答案如此简单。我想我对ava的所有不同选项感到困惑白细胞介素