2014-09-13 11 views
6

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:

  1. Jeśli zmienię atrybut user_token na nieprawidłowy, kod zgłasza wyjątek.
  2. 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ę:

+1

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? –

+1

@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

+1

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

Odpowiedz

1

The Insert Mirror Dokumentacja API jest trochę niepoprawna, zwraca pustą odpowiedź z kodem nagłówka statusu of 204 (http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html) "Brak treści", jeśli zakończy się powodzeniem. Niektóre fragmenty dokumentacji pozwoliły mi uwierzyć, że powtórzyłoby to referencje w odpowiedzi, ale tak nie było.

W oddzielnej notatce udało mi się zdebugować, dlaczego nie mogłem uzyskać danych uwierzytelniających umieszczanych na moim szkle, upewniając się, że mogę zainstalować moje tymczasowe szkło ze sklepu https://google.com/myglass na moim szklanym urządzeniu, które upewnia się, że jest łączność.

Powiązane problemy