微信小程序分享功能设计
目录
背景和价值
1 文件上传OSS,返回文件ID
2 生成分享链接并转发
签名参数(包括文件ID、访问人数限制等)
3 用户点击链接
3.1 用户点击链接时,后端验证签名有效性(防止篡改)。
3.2 查询数据库中的文件访问记录:
3.3 若当前访问用户未在记录中 且 已访问人数 < 限制数 → 允许访问并记录用户OpenID。
若超出限制 → 返回「访问人数已满」提示。
前端通过微信JSSDK加载文件预览或下载地址
前端访问OSS安全问题和解决
必须通过后端生成临时访问凭证(STS)或签名URL,仅传递临时令牌给前端。前端访问OSS
- 微信JSSDK的交互流程
- OSS文件访问流程:graph LR A[前端调用微信JSSDK] --> B[向后端请求OSS访问权限] B --> C{后端生成临时凭证/签名URL} C -->|返回临时令牌| A A --> D[通过临时凭证访问OSS文件]
- 关键角色:前端仅负责展示和触发下载,令牌生成和权限控制由后端完成。
- OSS文件访问流程:
二、安全实现方案
方案1:后端生成签名URL(推荐)
-
签名URL生成逻辑
- 后端通过OSS SDK生成带过期时间的签名URL(如有效期为1小时):
// Java示例(后端逻辑) GeneratePresignedUrlRequest request = new GeneratePresignedUrlRequest(bucketName, objectName); request.setExpiration(new Date(System.currentTimeMillis() + 3600 * 1000)); URL signedUrl = ossClient.generatePresignedUrl(request); - 前端通过微信JSSDK的
wx.downloadFile或wx.previewImage加载该URL。
- 后端通过OSS SDK生成带过期时间的签名URL(如有效期为1小时):
-
签名URL的优势
- 临时性:链接过期后自动失效,防止长期暴露资源。
- 无密钥暴露:前端无需处理OSS认证逻辑。
方案2:STS临时凭证
-
STS凭证获取流程
- 后端调用阿里云STS服务生成临时凭证(包含
AccessKeyId、AccessKeySecret、SecurityToken)。 - 前端使用临时凭证初始化OSS客户端(需配合
aliosswxsdk):// 微信小程序示例(前端) const client = new OSS({ region: 'oss-cn-hangzhou', accessKeyId: '临时AccessKeyId', accessKeySecret: '临时AccessKeySecret', stsToken: 'SecurityToken', bucket: 'your-bucket' });
- 后端调用阿里云STS服务生成临时凭证(包含
-
适用场景
- 需要在前端执行复杂OSS操作(如分片上传)时使用。
三、微信JSSDK与OSS的集成配置
-
跨域(CORS)配置
- 在OSS控制台为Bucket添加CORS规则,允许微信域名(如
servicewechat.com)的跨域请求:[ { "AllowedOrigin": "https://servicewechat.com", "AllowedMethod": ["GET", "POST"], "AllowedHeader": ["*"] } ]
- 在OSS控制台为Bucket添加CORS规则,允许微信域名(如
-
文件访问权限控制
- OSS文件需设置为私有读写,仅通过签名URL或STS授权访问。

浙公网安备 33010602011771号