我有一个appengine应用程序需要访问Google云端硬盘上的单个硬编码电子表格。
到目前为止,我已经实现了以下目标:
SpreadsheetService service = new SpreadsheetService("myapp");
service.setUserCredentials("myusername@gmail.com", "myhardcodedpassword");
当我今天尝试使用新用户时,即使用户名和密码肯定正确,我也获得了InvalidCredentialsException
。我的收件箱中收到了一封电子邮件,说我已经阻止了登录,并且似乎没有办法再次启用它们。
我也知道在源代码中硬编码密码是不好的做法。
但是,我已经在网上非常广泛地阅读了如何为此启用OAuth / OAuth2,并最终浪费了数小时和数小时拼接来自博客,stackoverflow答案等的信息片段,但无济于事。
理想情况下,解决方案将涉及生成长期访问令牌的初始过程,然后可以将其硬编码到应用程序中。
我想要一个明确的步骤列表,了解如何实现这一目标?
答案 0 :(得分:11)
编辑:由于Google重新设计了API控制台,以下步骤的详细信息已更改 - 请参阅评论
好的,这就是一步一步
刷新令牌相当于您长期存在的用户名/密码,因此这就是您需要硬编码的地方(或存储您的应用可以检索它的安全地点。)
当您需要访问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
将返回一个访问令牌
{
"access_token": "ya29.yyyyyyyyyyyyyyyyyy",
"token_type": "Bearer",
"expires_in": 3600
}
无论何时访问电子表格API
,都将访问令牌放入http标头中Authorization: Bearer ya29.yyyyyyyyyyyyyyyyy
你已经完成了
答案 1 :(得分:0)
Pinoyyid确实提供了很棒的帮助。我想跟进Python代码,以便访问个人(可通过网络访问)的Google云端硬盘。
这在Google App Engine中可以很好地运行(作为网络应用程序的一部分),也可以在桌面上独立运行(假设您的计算机上安装了Google App Engine SDK [可从以下网址获取:https://developers.google.com/appengine/downloads])。
就我而言,我在Pinyyid的过程中添加了https://www.googleapis.com/auth/drive范围,因为我希望能够访问我的所有Google云端硬盘文件。
按照Pinoyyid的说明获取刷新令牌等后,这个小Python脚本将获得Google驱动器上所有文件的列表:
import httplib2
import datetime
from oauth2client.client import OAuth2Credentials
from apiclient.discovery import build
API_KEY = 'AIz...' # from "Key for Server Applications" from "Public API Access" section of Google Developers Console
access_token = "ya29..." # from Piinoyyid's instructions
refresh_token = "1/V..." # from Piinoyyid's instructions
client_id = '654....apps.googleusercontent.com' # from "Client ID for web application" from "OAuth" section of Google Developers Console
client_secret = '6Cl...' # from "Client ID for web application" from "OAuth" section of Google Developers Console
token_expiry = datetime.datetime.utcnow() - datetime.timedelta(days=1)
token_uri = 'https://accounts.google.com/o/oauth2/token'
user_agent = 'python urllib (I reckon)'
def main():
service = createDrive()
dirlist = service.files().list(maxResults=30)
print 'dirlist', dirlist
result = dirlist.execute()
print 'result', result
def createDrive():
credentials = OAuth2Credentials(access_token, client_id, client_secret, refresh_token, token_expiry, token_uri, user_agent)
http = httplib2.Http()
http = credentials.authorize(http)
return build('drive', 'v2', http=http, developerKey=API_KEY)
main()
我很感谢所有提供解决方案的人员。