首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >应用程序引擎OAuth2.0授权的cron作业分析谷歌表格

应用程序引擎OAuth2.0授权的cron作业分析谷歌表格
EN

Stack Overflow用户
提问于 2017-02-11 22:48:27
回答 2查看 547关注 0票数 0

我正在创建一个Google项目,它将每5分钟自动触发一个函数来分析Google表。

OAuth授权

待分析的表格是G套件单,只对公司成员公开.所以我需要OAuth2授权访问。我该怎么做?

我想我需要一个服务帐户客户端ID,因为这将在服务器中自动运行,所以不可能有OAuth2流,对吗?如果函数在服务器中运行,谁将单击该按钮?

我需要一些方向。

谢谢

https://developers.google.com/identity/protocols/OAuth2ServiceAccount

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-02-16 04:08:29

最后,我用这种方式解决了这个问题:

  • 设置一个新的App服务帐户(我不知道一个“新的”帐户是否真的是临时的)
  • 注意那个新的服务帐户电子邮件。
  • 将该表与服务帐户邮件共享(如果没有此步骤,我还没有对其进行测试)
  • 以JSON的形式下载它的服务机密。
  • 使用此代码(灵感来源于(1)和(2)) 类analysisHandler(Handler):def get(self):凭据= "https://www.googleapis.com/auth/spreadsheets") http = httplib2.Http() #如果凭据仍然有效,则为credentials.invalid: logging.info(“有效凭据,输入主要功能“) http = credentials.authorize(http) main(http):credentials.refresh(http) main(http)

然后在main()中:

代码语言:javascript
复制
sheetService = discovery.build('sheets', 'v4', http=authorized_http)
logging.info("Reading Google Sheet")
result = sheetService.spreadsheets().values().get(spreadsheetId=spreadsheet_id, range=range_name).execute(http=authorized_http)

urlfetch.set_default_fetch_deadline(45)
logging.info("Printing in Google Sheet")
sheetService.spreadsheets().values().append(spreadsheetId=spreadsheet_id, range="Log", body=body, valueInputOption="USER_ENTERED").execute(http=authorized_http)

其中authorized_http参数是在credentials.authorize()之前构建的

不过,我认为这是可以改善的。

(1) 如何使用“服务帐户”授权(而不是基于用户的访问刷新令牌)

(2) 使用Python创建和共享Google表电子表格

票数 0
EN

Stack Overflow用户

发布于 2017-02-15 20:54:58

是的,它是一个OAuth2流,但不涉及手动用户操作--这些操作由服务器根据预先配置的信息自动执行。从你提到的文件来看:

GoogleWeb2.0系统支持服务器与服务器之间的交互,例如OAuth应用程序和Google之间的交互。对于此场景,您需要一个服务帐户,它是属于应用程序的帐户,而不是属于单个最终用户的帐户。您的应用程序代表服务帐户调用Google,因此用户不会直接参与其中。这个场景有时被称为“两条腿的OAuth”或“2LO”。(相关术语“三条腿的OAuth”指的是应用程序代表最终用户调用Google的场景,有时需要用户的同意。)

基本上你需要:

若要将域范围的权限委托给服务帐户,请首先在“服务帐户”页面中为现有服务帐户启用域范围内的委托,或在启用域范围委托的情况下创建新的服务帐户。 然后,G套件域的管理员必须完成以下步骤:

  1. 转到您的G套件域的管理控制台。
  2. 从控件列表中选择Security。如果未看到“安全性列表”,请从页面底部的灰色栏中选择“其他控件”,然后从控件列表中选择“安全性”。如果您看不到控件,请确保您是作为域的管理员注册的。
  3. 选择“显示更多”,然后从“选项”列表中选择“高级设置”。
  4. 在“身份验证”部分中选择“管理API客户端访问”。
  5. 在“客户端名称”字段中输入服务帐户的客户端ID。您可以在服务帐户页面中找到您的服务帐户的客户端ID。
  6. 在一个或多个API字段中,输入应用程序应被授予访问权限的范围列表。例如,如果您的应用程序需要在域范围内访问Google和Google API,请输入:https://www.googleapis.com/auth/drivehttps://www.googleapis.com/auth/calendar
  7. 单击授权。

您的应用程序现在有权作为您域中的用户进行API调用(以“模拟”用户身份)。准备进行授权API调用时,可以指定要模拟的用户。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42182137

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档