作者热门文章
- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我有一个 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 应用的用例。
最佳答案
我建议您的 Android 客户端承担授权请求的责任,因为它不被视为“可信任”客户端。
一个好的做法是生成一个签名的 URL 服务器端并将其发送到客户端,以便后者可以使用它以安全和不透明的方式将文件上传到您的存储桶。通过这种方式,您还可以消除客户的复杂性和对自然私有(private)凭证的暴露。
您可以在 official docs 中找到有关签名 URL 的更多信息
关于android - 从适用于 Google Cloud Storage 的 Android 应用程序验证为服务帐户,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26821384/
我想用C语言开发一个函数来进行一些处理,但这取决于chrome进程的状态。所以如果chrome正在运行,我应该杀死该进程以使程序正确执行 If(chrome is running ) system("
我是一名优秀的程序员,十分优秀!