【发布时间】:2019-04-22 09:25:03
【问题描述】:
我的目标是让客户使用访问令牌(无需 Gmail、Facebook 等)直接访问 Google Cloud Storage 文件。我想要这样的架构:
在创建存储文件时,服务器将创建一个文件并为其分配一个由服务器生成的密钥并将其发送给授权的客户端。只有拥有密钥的客户端才能访问存储文件。
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
String generatedString = getAlphaNumericString(16);
GcsFilename gcsFileName = new GcsFilename("feist*******2.appspot.com", generatedString);
GcsFileMetadata metaData = gcsService.getMetadata(gcsFileName);
while(metaData != null) {
generatedString = getAlphaNumericString(16);
gcsFileName = new GcsFilename("feist*********2.appspot.com", generatedString);
metaData = gcsService.getMetadata(gcsFileName);
}
/*GcsFileOptions.Builder builder = new GcsFileOptions.Builder();
builder.acl("public-read");*/
GcsFileOptions instance = GcsFileOptions.getDefaultInstance();
GcsOutputChannel outputChannel;
outputChannel = gcsService.createOrReplace(gcsFileName, instance);
copy(req.getInputStream(), Channels.newOutputStream(outputChannel));
JSONObject jsonWriter = new JSONObject();
jsonWriter.append("result", "ok");
jsonWriter.append("path", generatedString);
resp.setContentType("application/json; charset=UTF-8");
PrintWriter out = resp.getWriter();
out.print(jsonWriter.toString());
}
我已经添加了我的简单 java 代码来创建一个文件并将数据上传到它。有没有办法给这个文件添加一个密钥,以便直接从具有服务器生成的密钥的客户端访问。
注意:我有一个 3 层消息传递应用程序。我正在使用 Firebase Cloud Messaging 进行下游通知(我认为这超出了主题)。对于存储(图像、声音等),我使用的是 Google Cloud Storage。我不想让我的存储公开访问。我也不想实现以服务器为中心的身份验证来访问 Google Cloud Storage 资源。
【问题讨论】:
标签: authentication google-cloud-storage