Potrzebuję pomocy przy wstawianiu API Mirror Credentials z mojego kodu serwera Python. Używamy biblioteki Google API Python do wstawienia specjalnego tokena autoryzacji do interfejsu Mirror API, ale otrzymuję pusty wynik z mirror.accounts(). Insert(). Execute(), w którym powinienem uzyskać co najmniej błąd lub potwierdzenie, że poświadczenie tokena API przekazujemy do interfejsu Google Mirror API.W jaki sposób wstawiasz poświadczenia Google Glass Mirror z kodu po stronie serwera Pythona?
Oto nasz kod serwera Python z pewną redakcją naszych tajnych informacji, tajne informacje prywatne klucze i id_klienta znajdują się w tajnym pliku .json, który przechowujemy bezpiecznie na naszym serwerze.
with open(os.path.join(os.path.dirname(__file__), 'mirror-credentials.json')) as f:
credentials_json = json.load(f)
credentials = SignedJwtAssertionCredentials(
service_account_name=credentials_json['client_email'],
private_key=credentials_json['private_key'],
scope='https://www.googleapis.com/auth/glass.thirdpartyauth',
)
http = credentials.authorize(httplib2.Http())
mirror = apiclient.discovery.build('mirror', 'v1', http=http)
glass_request = mirror.accounts().insert(
userToken=$glassware_gallery_user_token,
accountType='com.mycompany',
accountName="testAccountName",
body={
'features': ["a", "b", "c"],
'password': $myapp_glass_auth_token,
'userData': [{"key": "realName", "value": "Rusty Shackleford"}],
'authTokens': [
{"type": "drchrono_glass_token", "authToken": $myapp_glass_auth_token}
],
},
)
retValue = glass_request.execute()
Uwaga: $glassware_gallery_user_token
jest znak, że przejdzie z Google App Gallery gdy zwrócimy Glassware na (mamy już zainstalowane naszą aplikację wyrobów szklanych).
Wykonując powyższy kod, otrzymujemy pustą wartość dla retValue
, jest to pusty słownik: {}
po wydrukowaniu. Z dokumentacji wygląda na to, że powinien to być komunikat o błędzie lub potwierdzenie.
W odpowiedzi na komentarz:
Oto wydruk co żądanie wysyłamy wygląda jak (got to przez wstawienie wyrażeń drukowania w httplib2 kodu źródłowego):
body='{"userData": [{"value": "Rusty Shackleford", "key": "realName"}], "authTokens": [{"authToken": "$omitted_auth_token", "type": "$myapp_glass_token"}], "password": "$omitted_auth_token", "features": ["a", "b", "c"]}', headers='{'content-length': '305', 'accept-encoding': 'gzip, deflate', 'accept': 'application/json', 'user-agent': 'google-api-python-client/1.2 (gzip)', 'content-type': 'application/json', 'authorization': 'Bearer ya29.hACi3eQf2L2awk3rrLgf1uZQHen2ZANgT_ObBqTNpqrwC6wa_DwjuO9q'}', request_uri='/mirror/v1/accounts/$my_google_serviceid/$com.myappname/rustyshack?alt=json'
I otrzymasz pusty słownik w odpowiedzi: {}
Widzę, że w rzeczywistości rozmawia z usług Google z 2 powodów:
- Jeśli zmienię atrybut user_token na nieprawidłowy, kod zgłasza wyjątek.
- Widzę liczbę połączeń API w Konsoli programisty Google, licząc te próby jako połączenia z limitem interfejsu API.
Rzeczywiste dane w odpowiedzi z serwerów Google (drukowane w httplib2 ma kod stanu 204:
''/'{'fp': , 'status': 204, 'will_close': False, 'chunk_left': 'UNKNOWN', 'length': 0, 'strict': 0, 'reason': 'No Content', 'version': 11, 'debuglevel': 0, 'msg': , 'chunked': 0, '_method': 'POST'}'
@TonyAllevato Próbuję pobrać wszystkie konta na urządzeniu z AccountManager. getAccounts(); otrzymuję tylko jedno konto typu "com.google". getAccountsByType ("com.xxxxxx") ze wskazaną aplikacją podaną podczas procesu sprawdzania zwraca pustą tablicę:
Nic natychmiast nie wyskakuje do mnie, ponieważ jest tam źle. Czy istnieje sposób dostarczenia surowego zrzutu żądania i odpowiedzi z serwera, zanim biblioteka klienta wykona konwersję typu danych Python? –
@TonyAllevato Drukuję żądanie, które budujemy z obiektu Python Mirror API. Nie wiem, jak zagłębić się w rzeczywisty kod API jeszcze głębiej. Czy istnieją przykłady Pythona z uwierzytelnianiem GDK, które mogę przeglądać i śledzić? – MikeN
Osobiście oferuję dodatkową kartę podarunkową steka w wysokości 250 USD dla kogoś, kto może mi pomóc rozwiązać ten problem. – MikeN