Аутентификация в качестве учетной записи службы из приложения Android для Google Cloud Storage
У меня есть приложение для Android, которое в конечном итоге будет хранить пользовательский контент в корзине 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();
Я получаю различные ошибки. Один из них является:
java.security.KeyStoreException: java.security.NoSuchAlgorithmException: KeyStore JKS implementation not found
Официальная документация просто игнорирует сценарий использования приложения Android.
1 ответ
Я бы посоветовал снять ответственность за авторизацию запроса с вашего Android-клиента, поскольку он не считается "надежным" клиентом.
Хорошей практикой является создание подписанного URL-адреса на стороне сервера и его отправка клиенту, чтобы последний мог использовать его для безопасной и непрозрачной загрузки файлов в ваши корзины. Таким образом, вы также избавите своих клиентов от сложности и подверженности естественным личным учетным данным.
Вы можете найти больше информации о подписанных URL в официальных документах.