Tôi có một ứng dụng được lưu trữ trên google app-engine (http://spititan.appspot.com). Tôi cũng có một công cụ dòng lệnh để truy cập ứng dụng đó thông qua ClientLogin. Đoạn mã là như sau:Tôi làm cách nào để sử dụng OAuth2 trong công cụ dòng lệnh để truy cập một ứng dụng được lưu trữ trên Google Appengine?
138 # get an AuthToken from Google accounts
139 auth_uri = 'https://www.google.com/accounts/ClientLogin'
140 authreq_data = urllib.parse.urlencode({ "Email": email_address,
141 "Passwd": password,
142 "service": "ah",
143 "source": appname,
144 "accountType": "HOSTED_OR_GOOGLE" })
145 request = urllib.request.Request(auth_uri, data=authreq_data)
146 response = opener.open(request)
147 response_body = str(response.read(), 'utf-8')
148 response_dict = dict(x.split("=") for x in response_body.split("\n") if x)
149 return response_dict["Auth"]
...
...
112 # Send the auth token to the AppEngine to login
113 continue_location = "http://localhost/"
114 args = {"continue": continue_location, "auth": auth_token}
115 host = "spititan.appspot.com" % appname
116 url = "https://spititan/_ah/login?%s" % urllib.parse.urlencode(args)
...
...
Công cụ này hoạt động tốt đối với tôi khá lâu với làm phiền nhỏ mà tôi cần phải cung cấp mật khẩu mỗi vài ngày. Tôi nhận thấy rằng OAuth2 là cách được đề xuất hiện tại để xác thực, vì vậy, tôi đã cố gắng tìm hiểu cách sử dụng và viết đoạn mã sau bằng cách làm theo tài liệu (http://code.google.com/p/google-api-python-client/wiki/OAuth2):
59 storage = oauth2client.file.Storage(
60 os.path.join(FLAGS.data_dir, 'confidential.dat'))
61
62 credentials = storage.get()
63
64 if credentials is None or credentials.invalid == True:
65 flow = oauth2client.client.OAuth2WebServerFlow(
66 client_id='<xxxxx>',
67 client_secret='<xxxxx>',
68 scope='<xxxxx>',
69 user_agent='<xxxx>')
70
71 credentials = oauth2client.tools.run(flow, storage)
72
73 http = httplib2.Http(cache=".cache")
74 http = credentials.authorize(http)
sự hiểu biết của tôi là 'client_id' và 'client_secret' được mua khi tôi đăng ký ứng dụng, user_agent là một chuỗi định dạng miễn phí, vấn đề là: những gì tôi nên đặt trong 'phạm vi '? Tôi đã thử http://spititan.appspot.com/spititan nhưng không có may mắn, không ai có bất kỳ ý tưởng?
Cảm ơn
Tôi không nghĩ điều này là chính xác. Phạm vi đó là phạm vi OAuth cho phép ứng dụng quản lý các ứng dụng App Engine của người dùng, ví dụ bằng cách chuyển mã thông báo làm mới đến appcfg.py như được mô tả trong https://developers.google.com/appengine/docs/python/tools/ uploadanapp # oauth –
Tôi không nghĩ rằng điều này là đúng mặc dù tôi chưa thử đề xuất. Tôi nghĩ ít nhất là URL phạm vi sẽ đề cập đến 'spititan' của appid bằng cách nào đó. – spititan
@JasonHall Right, phạm vi đó dành cho ủy quyền quản trị viên ứng dụng. – alex