获取 STS 临时凭证
对于大部分上传文件的场景,建议在服务端使用 STS SDK
获取 STS
临时访问凭证,然后在客户端使用 STS
临时凭证和 OSS SDK
直接上传文件
客户端能重复使用服务端生成的 STS
临时访问凭证生成签名,因此适用于基于分片上传大文件、基于分片断点续传的场景
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");
});