从Appengine访问Google云端硬盘电子表格

fun*_*bro 3 google-app-engine google-spreadsheet-api google-drive-api google-oauth

我有一个appengine应用程序需要访问Google云端硬盘上的单个硬编码电子表格.

到目前为止,我已经实现了以下目标:

SpreadsheetService service = new SpreadsheetService("myapp");
service.setUserCredentials("myusername@gmail.com", "myhardcodedpassword");
Run Code Online (Sandbox Code Playgroud)

当我今天尝试使用新用户时,InvalidCredentialsException即使用户名和密码肯定是正确的.我的收件箱中收到一封电子邮件,说我已经阻止了登录,但是似乎没有办法再次启用它们.

我也知道在源代码中硬编码密码是不好的做法.

但是,我已经在网上非常广泛地阅读了如何为此启用OAuth/OAuth2,并最终浪费了数小时和数小时拼接来自博客,stackoverflow答案等的信息片段,但无济于事.

理想情况下,解决方案将涉及生成长期访问令牌的初始过程,然后可以将其硬编码到应用程序中.

我想要一个明确的步骤列表,了解如何实现这一目标?

pin*_*yid 11

编辑:由于Google重新设计了API控制台,以下步骤的详细信息已更改 - 请参阅注释

好的,这里一步一步走

  1. 转到Google Cloud Console并注册您的项目(也称为应用程序)
  2. 您需要记下客户端ID和客户端密钥
  3. 转到OAuth Playground,单击齿轮图标,然后选择并输入您自己的凭据
  4. 系统会提醒您,您需要返回Cloud COnsole并将Oauth Playground添加为有效的回调网址.那样做吧.
  5. 执行第1步,选择电子表格范围,然后单击"授权"
  6. 如果出现提示,请选择您的Google帐户,并在提示时授予身份验
  7. 执行第2步,点击"交换代码的授权码"
  8. 您将看到一个包含刷新令牌的输入框

刷新令牌相当于您长期存在的用户名/密码,因此这就是您需要硬编码(或存储您的应用程序可以检索它的安全地点).

当您需要访问Google Spreadsheets时,您将致电

POST https://accounts.google.com/o/oauth2/token
content-type: application/x-www-form-urlencoded
client_secret=************&grant_type=refresh_token&refresh_token=1%2xxxxxxxxxx&client_id=999999999999.apps.googleusercontent.com
Run Code Online (Sandbox Code Playgroud)

这将返回一个访问令牌

{
  "access_token": "ya29.yyyyyyyyyyyyyyyyyy", 
  "token_type": "Bearer", 
  "expires_in": 3600
}
Run Code Online (Sandbox Code Playgroud)

无论何时访问电子表格API,都将访问令牌放入http标头中

Authorization: Bearer ya29.yyyyyyyyyyyyyyyyy
Run Code Online (Sandbox Code Playgroud)

而且你已经完成了