微信小程序分享功能设计

背景和价值

1 文件上传OSS,返回文件ID

2 生成分享链接并转发

签名参数(包括文件ID、访问人数限制等)

3 用户点击链接

3.1 用户点击链接时,后端验证签名有效性(防止篡改)。
3.2 查询数据库中的文件访问记录:

3.3 若当前访问用户未在记录中 ​且​ 已访问人数 < 限制数 → 允许访问并记录用户OpenID。
若超出限制 → 返回「访问人数已满」提示。

前端通过微信JSSDK加载文件预览或下载地址

前端访问OSS安全问题和解决

必须通过后端生成临时访问凭证(STS)签名URL,仅传递临时令牌给前端。前端访问OSS

  1. 微信JSSDK的交互流程
    • OSS文件访问流程
      graph LR A[前端调用微信JSSDK] --> B[向后端请求OSS访问权限] B --> C{后端生成临时凭证/签名URL} C -->|返回临时令牌| A A --> D[通过临时凭证访问OSS文件]
    • 关键角色:前端仅负责展示和触发下载,令牌生成和权限控制由后端完成

二、安全实现方案

方案1:后端生成签名URL(推荐)

  1. 签名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.downloadFilewx.previewImage加载该URL。
  2. 签名URL的优势

    • 临时性:链接过期后自动失效,防止长期暴露资源。
    • 无密钥暴露:前端无需处理OSS认证逻辑。

方案2:STS临时凭证

  1. STS凭证获取流程

    • 后端调用阿里云STS服务生成临时凭证(包含AccessKeyIdAccessKeySecretSecurityToken)。
    • 前端使用临时凭证初始化OSS客户端(需配合aliosswxsdk):
      // 微信小程序示例(前端)
      const client = new OSS({
        region: 'oss-cn-hangzhou',
        accessKeyId: '临时AccessKeyId',
        accessKeySecret: '临时AccessKeySecret',
        stsToken: 'SecurityToken',
        bucket: 'your-bucket'
      });
      
  2. 适用场景

    • 需要在前端执行复杂OSS操作(如分片上传)时使用。

三、微信JSSDK与OSS的集成配置

  1. 跨域(CORS)配置

    • 在OSS控制台为Bucket添加CORS规则,允许微信域名(如servicewechat.com)的跨域请求:
      [
        {
          "AllowedOrigin": "https://servicewechat.com",
          "AllowedMethod": ["GET", "POST"],
          "AllowedHeader": ["*"]
        }
      ]
      
  2. 文件访问权限控制

    • OSS文件需设置为私有读写,仅通过签名URL或STS授权访问。

参考资料

posted @ 2025-05-28 12:42  向着朝阳  阅读(88)  评论(0)    收藏  举报