HarmonyOS鸿蒙Next中用华为云 OBS 存储用户上传的图片,如何在App中安全获取临时访问链接?
HarmonyOS鸿蒙Next中用华为云 OBS 存储用户上传的图片,如何在App中安全获取临时访问链接? 应用允许用户传头像到 OBS,但不想暴露永久 AK/SK。鸿蒙端怎么安全生成临时 URL?
业界通用做法的通过自己的服务器中转一下!
就是把AK/SK 等密钥存储在自己的服务器上,然后APP通过接口将图片上传给自己的服务器,服务器再去签名等上传到OSS就行了!
开发手册上都写了,密钥放在APP上不安全!
更多关于HarmonyOS鸿蒙Next中用华为云 OBS 存储用户上传的图片,如何在App中安全获取临时访问链接?的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
没用过obs,用的oss
在HarmonyOS Next中,可通过华为云OBS SDK的createSignedUrl方法生成预签名URL。需在AppGallery Connect配置云存储服务,集成agconnect-storage及obs-sdk。调用时指定对象键、HTTP方法(如GET)、过期时间,SDK将使用临时安全凭证自动签名。生成的临时链接可直接用于安全访问OBS中的图片资源。
在HarmonyOS Next应用中安全获取华为云OBS的临时访问链接,推荐使用**临时访问凭证(STS)**方案,避免AK/SK硬编码或直接暴露在客户端。以下是具体实现步骤:
1. 整体流程
鸿蒙App → 业务服务器(需自建) → 华为云IAM/STS服务 → 返回临时凭证 → 鸿蒙App用凭证生成临时URL
关键点:敏感操作(申请临时凭证)必须由业务服务器完成,客户端仅使用临时凭证生成链接。
2. 步骤详解
(1)业务服务器端部署
- 在业务服务器(如华为云ECS)部署服务端接口,该接口需集成华为云IAM的STS能力。
- 服务端通过固定AK/SK调用华为云STS API,申请临时安全凭证(包含临时AK/SK、SecurityToken、过期时间)。
- 设置合理的临时凭证有效期(如30分钟~1小时),并严格限制权限策略(Policy),仅允许对指定OBS路径的读/写操作。
- 将临时凭证返回给鸿蒙客户端。
(2)鸿蒙客户端实现(示例代码)
- 使用
@ohos/request或@ohos/net.http模块请求业务服务器接口,获取临时凭证。 - 使用
@ohos/security.huks等模块妥善保护收到的临时凭证。 - 利用华为云OBS SDK(需确认HarmonyOS Next兼容性)或自行拼接URL,生成带临时签名的访问链接。
示例:拼接临时下载URL(若OBS SDK暂不兼容)
// 假设已从业务服务器获取到临时凭证: tempAk, tempSk, securityToken, expireTime
// 以及对象在OBS中的地址: obsEndpoint, bucketName, objectKey
import crypto from '@ohos.crypto';
// 1. 构造请求时间(必须与凭证有效期匹配)
const requestDate = new Date().toUTCString();
// 2. 生成签名(具体算法参考华为云OBS签名文档)
const canonicalString = `GET\n\n\n${requestDate}\n${securityToken}\n/${bucketName}/${objectKey}`;
const signature = crypto.createHash('sha256').update(canonicalString).digest('hex'); // 需按OBS要求编码
// 3. 生成临时访问URL
const tempUrl = `https://${bucketName}.${obsEndpoint}/${objectKey}?`
+ `AccessKeyId=${tempAk}`
+ `&Expires=${expireTime}`
+ `&SecurityToken=${securityToken}`
+ `&Signature=${signature}`;
// 4. 使用该URL进行图片上传/下载(注意:PUT上传需调整签名方法)
3. 安全建议
- 业务服务器需对客户端请求做身份鉴权(如用户登录态验证),防止凭证被滥用。
- 临时凭证的权限策略(Policy)应遵循最小权限原则,例如:
{ "Statement": [{ "Effect": "Allow", "Action": ["obs:object:PutObject", "obs:object:GetObject"], "Resource": ["obs:*:bucket:your-bucket-name/avatar/*"] }] } - 客户端收到临时凭证后,建议存储在内存中,使用后及时清理,避免持久化泄露。
4. 备选方案
若业务服务器开发成本高,可考虑:
- 华为云函数工作流(FunctionGraph):部署无服务器函数作为中介,由鸿蒙App触发函数获取临时凭证。
- OBS SDK直接集成:若华为云官方发布HarmonyOS Next版OBS SDK,可能内置临时凭证交换机制,需关注官方更新。
总结
核心是通过业务服务器中转STS请求,鸿蒙客户端仅使用短期有效的临时凭证生成链接。这既保证了AK/SK不暴露,又实现了灵活的访问控制。具体签名算法请严格参照华为云OBS API文档的最新要求。

