从Android应用中作为Google云端存储的服务帐户进行身份验证

mna*_*ees 5 android google-cloud-storage google-oauth google-oauth-java-client

我有一个Android应用程序,最终将用户生成的内容存储在Google云端存储分区中.但我无法通过我的应用代码执行此操作.代码如下所示:

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();
Run Code Online (Sandbox Code Playgroud)

我收到各种错误.其中之一是:

java.security.KeyStoreException: java.security.NoSuchAlgorithmException: KeyStore JKS implementation not found
Run Code Online (Sandbox Code Playgroud)

官方文档只是忽略了Android应用程序的用例.

Jos*_*gia 1

我建议您承担授权 Android 客户端请求的责任,因为它不被视为“可信”客户端。

遵循的一个好做法是生成签名 URL 服务器端并将其发送到客户端,以便客户端可以使用它以安全且不透明的方式将文件上传到您的存储桶。通过这种方式,您还可以消除客户自然私人凭证的复杂性和暴露性。

您可以在官方文档中找到有关签名 URL 的更多信息