5

Ich habe eine Android-App, die schließlich von Nutzern generierte Inhalte in einem Google Cloud Storage-Bucket speichern wird. Aber ich kann dies nicht über meinen App-Code tun. Der Code sieht so aus:Authentifizieren als Dienstkonto von Android App für Google Cloud Storage

JsonFactory JSON_FACTORY = JacksonFactory.getDefaultInstance(); 
HttpTransport httpTransport = GoogleNetHttpTransport.newTrustedTransport(); 
KeyStore keystore = SecurityUtils.getPkcs12KeyStore(); 
keystore.load(resources.openRawResource(R.raw.secret), "***password***".toCharArray()); 
PrivateKey key = (PrivateKey)keystore.getKey("privatekey", "***password***".toCharArray()); 
credential = new GoogleCredential.Builder() 
.setTransport(httpTransport) 
.setJsonFactory(new JacksonFactory()) 
.setServiceAccountPrivateKey(key) 
.setServiceAccountId("**************@developer.gserviceaccount.com") 
.setServiceAccountScopes(Collections.singleton(StorageScopes.DEVSTORAGE_READ_WRITE)) 
.build(); 
credential.refreshToken(); 
String URI = "https://storage.googleapis.com/"+BUCKET_NAME; 
HttpRequestFactory requestFactory = httpTransport.createRequestFactory(credential); 
GenericUrl url = new GenericUrl(URI); 
HttpRequest request = requestFactory.buildGetRequest(url); 
HttpResponse response = request.execute(); 
String content = response.parseAsString(); 
Log.d("testing", "response content is: " + content); 
new Storage.Builder(httpTransport, JSON_FACTORY, credential).setApplicationName("Doubts").build(); 

Ich bekomme verschiedene Fehler. Einer davon ist:

java.security.KeyStoreException: java.security.NoSuchAlgorithmException: KeyStore JKS implementation not found 

Die offizielle Dokumentation ignoriert einfach den Anwendungsfall von einer Android App.

+1

binaryking finden> Auch wenn dies gearbeitet - würden Sie private Schlüssel/Passwort in Ihrem Android-App einbinden ?? – Jasper

Antwort

1

Ich würde vorschlagen, die Verantwortung für die Autorisierung der Anfrage von Ihrem Android-Client zu übernehmen, da dies nicht als "vertrauenswürdiger" Client angesehen wird.

Eine bewährte Vorgehensweise besteht darin, eine signierte URL-Server-Seite zu erstellen und diese an den Client zu senden, damit dieser die Dateien auf sichere und undurchsichtige Weise in Ihre Buckets hochladen kann. Auf diese Weise werden Sie auch die Komplexität und Offenlegung von natürlich privaten Anmeldeinformationen von Ihren Kunden entfernen.

Sie können mehr über signierten URLs im official docs

Verwandte Themen