const argv = require('yargs').argv /** * @desc curl -X POST -H "Content-Type: application/json" -H 'X-Parse-Application-Id: edu-textbook' http://8.140.98.43/parse/functions/aliOssSTS * */ export function defineAliOssSTS(){ // function defineAuthingLogin(){ Parse.Cloud.define("aliOssSTS", async (request) => { let result = await getAliyunOssAccessToken() return result }); } // 公开OSS // 用户登录名称 mailto:hep-textbook-api@cloudhep.onaliyun.com // Bucket: hep-textbook // 内网地址:http://oss-cn-beijing.aliyuncs.com/ // 外网地址:oss-cn-beijing-internal.aliyuncs.com const ALI_OSS_BUCKET = process.env.ALI_OSS_BUCKET || "hep-textbook" const ALI_OSS_ACCESS_KEY_ID = process.env.ALI_OSS_ACCESS_KEY_ID || "LTAI5t6AbTiAvXmeoVdJZhL3" const ALI_OSS_ACCESS_KEY_SECRET = process.env.ALI_OSS_ACCESS_KEY_SECRET || "KLtQRdIW69KLP7jnzHNUf7eKmdptxH" // 私有OSS // ---oss--- const ALI_OSS_BUCKET_SECRET = process.env.ALI_OSS_BUCKET || "hep-textbook" // AccessKey ID: LTAI5t6AbTiAvXmeoVdJZhL3 // AccessKey Secret: KLtQRdIW69KLP7jnzHNUf7eKmdptxH // 通过STS服务生成临时访问凭证。临时访问凭证包括临时访问密钥(AccessKeyId和AccessKeySecret)和安全令牌(SecurityToken)。 const { STS } = require('ali-oss'); const OSS = require("ali-oss"); const sts = new STS({ // 从环境变量中获取访问凭证。运行本代码示例之前,请确保已设置环境变量ALI_OSS_ACCESS_KEY_ID和ALI_OSS_ACCESS_KEY_SECRET。 accessKeyId: ALI_OSS_ACCESS_KEY_ID, accessKeySecret: ALI_OSS_ACCESS_KEY_SECRET }); const ossClient = new OSS({ // yourRegion填写Bucket所在地域。以华东1(杭州)为例,yourRegion填写为oss-cn-hangzhou。 region: "oss-cn-beijing", // 从STS服务获取的临时访问密钥(AccessKey ID和AccessKey Secret)。 accessKeyId: ALI_OSS_ACCESS_KEY_ID, accessKeySecret: ALI_OSS_ACCESS_KEY_SECRET, // 填写Bucket名称。 bucket: ALI_OSS_BUCKET || "hep-textbook", timeout:5000*1000 }); function getAliyunOssAccessToken(){ // roleArn填写角色ARN。 // policy填写自定义权限策略。 // expiration用于设置临时访问凭证有效时间单位为秒,最小值为900,最大值以当前角色设定的最大会话时间为准。 // sessionName用于自定义角色会话名称,用来区分不同的令牌,例如填写为SessionTest。 // let result = await sts.assumeRole('acs:ram::137918634953****:role/ossram', `{ // "Version": "1", // "Statement": [ // { // "Effect": "Allow", // "Action": [ // "oss:*" // ], // "Resource": [ // "acs:oss:*:*:${ALI_OSS_BUCKET}", // "acs:oss:*:*:${ALI_OSS_BUCKET}/*" // ] // } // ] // }`, '3600', 'SessionTest' ) // return result.credentials return { bucket: ALI_OSS_BUCKET, AccessKeyId: ALI_OSS_ACCESS_KEY_ID, AccessKeySecret:ALI_OSS_ACCESS_KEY_SECRET, SecurityToken: null, Expiration: null } // AccessKeyId: result.credentials.AccessKeyId, // AccessKeySecret: result.credentials.AccessKeySecret, // SecurityToken: result.credentials.SecurityToken, // Expiration: result.credentials.Expiration } module.exports.getAliyunOssAccessToken = getAliyunOssAccessToken if(argv?.test){ getAliyunOssAccessToken() } // 获取临时签名地址 async function signatureUrl(url,options){ let expires = options?.expires || 600 // 默认10分钟 let urlObj = new URL(url) let fileKey = decodeURIComponent(urlObj.pathname) // let r1 = await this.client?.get(fname, file, putOptions); let r1 = await ossClient?.signatureUrl(fileKey, { expires: expires, }); console.log(r1) return r1; } module.exports.signatureUrl = signatureUrl