Mam aplikację hostowaną w wyszukiwarce Google (http://spititan.appspot.com). Mam również narzędzie wiersza poleceń, aby uzyskać dostęp do tej aplikacji za pośrednictwem ClientLogin. Fragment kodu jest następujący:Jak używać OAuth2 w narzędziu wiersza poleceń, aby uzyskać dostęp do aplikacji hostowanej w 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)
...
...
To narzędzie działa dobrze dla mnie na dłuższą chwilę z niewielkim drażnić że muszę podać hasło co kilka dni. Zauważyłem, że OAuth2 jest obecnie zalecanym sposobem uwierzytelniania, więc udało mi się nauczyć go używać i napisać poniższy fragment kodu, postępując zgodnie z dokumentem (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)
Moje zrozumienie jest 'client_id' i 'client_secret' zostały nabyte kiedy zarejestrować aplikację user_agent to darmowy format string, problem: co należy umieścić w „zakresie "? Próbowałem http://spititan.appspot.com/spititan, ale nie miałem szczęścia, czy ktoś ma jakiś pomysł?
Dzięki
Nie sądzę, że to jest poprawne. Ten zakres to zakres OAuth, który autoryzuje aplikację do administrowania aplikacjami App Engine użytkownika, na przykład przekazując token odświeżania do appcfg.py zgodnie z opisem w https://developers.google.com/appengine/docs/python/tools/ uploadinganapp # oauth –
Nie sądzę, żeby to było w porządku, chociaż nie wypróbowałem jeszcze sugestii. Sądzę, że przynajmniej adres URL zakresu będzie jakoś wspomnieć o "spititanie". – spititan
@JasonHall Dobrze, ten zakres dotyczy autoryzacji administratora aplikacji. – alex