2014-04-29 15 views
5

Próbowałem przesłać pliki audio/wideo z aplikacji na iOS do Google Cloud Server. Chcę, aby użytkownik nie musiał się logować na swoje konto google przed przesłaniem. Obecnie moje rozwiązania robocze polegają na tym, aby wiadro na serwerze było "otwarte", czyli w zasadzie dostępne dla każdej osoby w Internecie do odczytu/zapisu wiadra. ustawić klucz API do mojego obiektu GTLServiceStorage iOS:Przesyłanie do Google Cloud Storage przy użyciu konta usługi z aplikacji iOS

_serviceStorage.additionalHTTPHeaders = HTTP_HEADERS; 
_serviceStorage.APIKey = kCloudBackendAPIKey; 

W ten sposób, użytkownik z poziomu aplikacji powinni mieć możliwość przesyłania bez logowania.

Teraz chcę, aby wiadro było prywatne, aby tylko użytkownik z autoryzowanej aplikacji mógł uzyskać do niego dostęp.

Na Androidzie, Jestem w stanie to zrobić, korzystając z generowanego przeze mnie certyfikatu z serwera i zaimplementować go do plików projektu Android na przykładzie ze strony Dokumentacji Google. (Przy użyciu identyfikatora konta usługi & plików PKCS12). Kod na Androida, aby ustawić poświadczenia jest tak:

KeyStore keystore = KeyStore.getInstance("PKCS12"); 
keystore.load(getResources().openRawResource(R.raw.secret), MY_PASSWD.toCharArray()); 

PrivateKey key = (PrivateKey) keystore.getKey("privatekey", MY_PASSWD.toCharArray()); 

GoogleCredential credential = new GoogleCredential.Builder() 
.setTransport(httpTransport) 
.setJsonFactory(jsonFactory) 
.setServiceAccountId(SERVICE_ACCOUNT_ID) 
.setServiceAccountScopes(scopes) 
.setServiceAccountPrivateKey(key) 
.build(); 

storage = new Storage.Builder(httpTransport, jsonFactory, credential) 
      .setApplicationName(APP_NAME).build(); 

// --- continue upload using storage 

Jednak na razie nie mogę wydawać się znaleźć sposób, aby realizować ten sam mechanizm do mojej aplikacji iOS. Czy istnieje sposób, w jaki mogę użyć identyfikatora konta usługi Google do przesyłania plików w aplikacji na iOS, aby użytkownik nie musiał najpierw logować się na swoje konto Goolge?

+0

Hi @adipurnama, znalazłeś rozwiązanie tego problemu? Mam ten sam problem. –

+0

adipurnama, cuGoku> Czy w aplikacji mobilnej systemu Android został podany plik pliku klucza prywatnego (.p12) i hasło? Jeśli tak, czy to bezpieczne? – Jasper

+0

jakieś rozwiązanie? dzięki ... –

Odpowiedz

1

Trzymanie klucza prywatnego w aplikacji nie jest bezpieczne dla produkcji i nie jest prawidłowym sposobem. Nie można też użyć tej samej sztuczki z IOS.

Rozwiązaniem jest stworzenie klucz API publicznych (https://console.developers.google.com -> Projekt -> Poświadczenia -> Tworzenie nowego klucza (w ramach publicznego dostępu API). -> Android/iOS klucz

ta powinna być na tyle bezpieczne, ponieważ potencjalnie klucz jest związany z sha-1 i nazwą twojej aplikacji na Androidzie Powinienem jednak zauważyć, że ograniczenie to jeszcze mi nie działało, więc w międzyczasie opuściłem pole puste, co oznacza "Dowolna aplikacja dozwolona" - Zaktualizuję tę odpowiedź, gdy dowiem się, jak to zrobić poprawnie:

Oto jak to zrobiłem w Androidzie:

HttpTransport httpTransport = new NetHttpTransport(); 
JsonFactory jsonFactory = AndroidJsonFactory.getDefaultInstance(); 

mStorage = new Storage.Builder(httpTransport, jsonFactory, null) 
      .setApplicationName(PROJECT_ID) 
      .build(); 
... 
... 
mStorage.objects() 
       .get(BUCKET_NAME, fileName) 
       .setKey(API_KEY) 
       .setAlt("media") 
       .executeAndDownloadTo(stream); 

Jeśli przypadkiem dowiedzieć się, jak ograniczyć użycie do jednej aplikacji chciałbym usłyszeć odpowiedź, jak również :)

powodzenia

+0

Witam, czy znalazłeś sposób na dodanie SHA1 i pakietu, aby ograniczyć dostęp do jednej aplikacji na Androida? Zawsze "Zaloguj się jako" jako błąd. – CeccoCQ

+0

Jeszcze niestety. obecnie wciąż używa "wszystkich dozwolonych aplikacji". Chciałbym usłyszeć, jeśli znalazłeś rozwiązanie – maxandron

+0

Brak rozwiązania dla mnie. Na razie używam pliku p12 z typem konta usługi. Ale zastanawiam się, gdzie mogę ukryć plik p12 w aplikacji na Androida ... To niesamowite, że nie ma żadnego rozwiązania dla klienta Android ... czy masz jakieś pomysły? – CeccoCQ

Powiązane problemy