Google apps script 将Google插件连接到Google vm实例
我正在为google drive开发一个附加组件 作为这个附加组件功能的一部分,我想合并一个GoogleVM服务器,对用户的GoogleDrive文件执行一些处理(即,您通过加载项单击一个文件,将带有下载链接的请求发送到服务器,服务器下载该文件,然后最终使用有关该文件的一些有用信息响应该请求)。加载项的应用程序脚本和vm实例都连接到同一个google“项目” 我正在与google的OAuth2.0系统以及如何将附加组件的授权和vm实例连接在一起进行斗争 目前,当用户第一次打开附加组件时,他们会像这样进入授权屏幕 一旦他们授权,我的加载项就可以访问所有预期的作用域,包括对google驱动器文件的读取权限 现在我希望我的服务器也能访问它们。不幸的是,我不知道如何做到这一点 我试着简单地请求python中返回的url。虽然请求返回的状态代码为200,但我似乎无法下载该文件 我还研究了python的授权流程(我正在运行一个flask服务器) 如果能澄清这个问题,我将不胜感激。坦率地说,我发现谷歌关于这个问题的文档非常分散和混乱。因此,即使知道正确的查找位置也会非常有帮助 非常感谢 编辑 我正在添加一些附加代码以帮助提供一些清晰性。这是我当前如何从附加模块向服务器发出请求的: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实例连接在一起进行斗争 目前,当用户第一次打开附加组件时,他们会像
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示例的选项卡)
注:
- 如果您还没有这样做,您可能需要这样做