当前位置: 首页 > article >正文

断点续传【授权访问】

本文介绍如何使用STS以及签名URL临时授权访问OSS资源。

授权方式

OSS支持多种授权方式进行客户端授权,以下提供了三种不同授权方式的简要说明,并提供了使用相应授权方式实现简单上传的代码示例,您可以根据使用场景对认证和授权的要求,参考对应的授权方式。

 

node.js

const express = require("express");
const { STS } = require('ali-oss');

const app = express();
const path = require("path");

app.use(express.static(path.join(__dirname, "templates")));
// 配置环境变量ALIBABA_CLOUD_ACCESS_KEY_ID。
const accessKeyId = process.env.ALIBABA_CLOUD_ACCESS_KEY_ID;
// 配置环境变量ALIBABA_CLOUD_ACCESS_SECRET。
const accessKeySecret = process.env.ALIBABA_CLOUD_ACCESS_SECRET;

app.get('/get_sts_token_for_oss_upload', (req, res) => {
  let sts = new STS({
   accessKeyId: accessKeyId,
   accessKeySecret: accessKeySecret
 });
   // roleArn填写步骤2获取的角色ARN,例如acs:ram::175708322470****:role/ramtest。
   // policy填写自定义权限策略,用于进一步限制STS临时访问凭证的权限。如果不指定Policy,则返回的STS临时访问凭证默认拥有指定角色的所有权限。
   // 3000为过期时间,单位为秒。
   // sessionName用于自定义角色会话名称,用来区分不同的令牌,例如填写为sessiontest。
   sts.assumeRole('<YOUR_ROLE_ARN>', ``, '3000', 'sessiontest').then((result) => {
     console.log(result);
     res.json({
       AccessKeyId: result.credentials.AccessKeyId,
       AccessKeySecret: result.credentials.AccessKeySecret,
       SecurityToken: result.credentials.SecurityToken,
     });
   }).catch((err) => {
     console.log(err);
     res.status(400).json(err.message);
   });
 });

app.listen(8000, () => {
  console.log("http://127.0.0.1:8000");
});

 

客户端示例代码

web端使用临时访问凭证上传文件到OSS的示例代码如下

let credentials = null;
const form = document.querySelector("form");
form.addEventListener("submit", async (event) => {
  event.preventDefault();
  // 临时凭证过期时,才重新获取,减少对STS服务的调用。
  if (isCredentialsExpired(credentials)) {
    const response = await fetch("/get_sts_token_for_oss_upload", {
      method: "GET",
    });
    if (!response.ok) {
      // 处理错误的HTTP状态码。
      throw new Error(
        `获取STS令牌失败: ${response.status} ${response.statusText}`
      );
    }
    credentials = await response.json();
  }
  const client = new OSS({
    // 将<YOUR_BUCKET>设置为OSS Bucket名称。
    bucket: "<YOUR_BUCKET>",
    // 将<YOUR_REGION>设置为OSS Bucket所在地域,例如region: 'oss-cn-hangzhou'。
    region: "oss-<YOUR_REGION>",
    authorizationV4: true,
    accessKeyId: credentials.AccessKeyId,
    accessKeySecret: credentials.AccessKeySecret,
    stsToken: credentials.SecurityToken,
  });

  const fileInput = document.querySelector("#file");
  const file = fileInput.files[0];
  const result = await client.put(file.name, file);
  console.log(result);
});

/**
 * 判断临时凭证是否到期。
 **/
function isCredentialsExpired(credentials) {
  if (!credentials) {
    return true;
  }
  const expireDate = new Date(credentials.Expiration);
  const now = new Date();
  // 如果有效期不足一分钟,视为过期。
  return expireDate.getTime() - now.getTime() <= 60000;
}

 


http://www.kler.cn/a/430641.html

相关文章:

  • ROM修改进阶教程------修改刷机包init.rc 自启用户自定义脚本的一些基本操作 代码格式与注意事项
  • 绩效考核试题
  • 无人设备遥控器之定向天线篇
  • 大语言模型学习工具及资源总结和落地应用
  • Scala项目(图书管理系统)
  • 动态规划<四> 回文串问题(含对应LeetcodeOJ题)
  • js后端开发之Next.js、Nuxt.js 与 Express.js
  • 在huggingface.co的Spaces中推理,得到错误:No space left on device
  • Docker多架构镜像构建踩坑记
  • AI Weekly『12月2-8日』:OpenAI发布发布满血版o1,Meta发布Llama 3.3模型!
  • 将yolo系列中的类别转为字典或者list
  • MongoDB靶场(手工注入)攻略
  • UART串口通讯---STM32
  • 初次使用uniapp编译到微信小程序编辑器页面空白,真机预览有内容
  • 2024.12.10总结
  • zsh配置
  • Word中的公式域
  • SQL项目实战与综合应用——项目设计与需求分析
  • 鸿蒙面试---1208
  • Muduo网络库解析---事件循环模块
  • Java 基础之 XQuery:强大的 XML 查询语言
  • 【C++指南】类和对象(七):友元
  • html小白初学
  • go语言zero框架对接阿里云消息队列MQ的rabbit的配置与调用
  • Java项目--仿RabbitMQ的消息队列--需求分析
  • PVE修改IP地址