From 9adcc812a388b150d5db6cd5fdb50b19c1a80d7c Mon Sep 17 00:00:00 2001 From: tone <3341154833@qq.com> Date: Sat, 5 Oct 2024 01:30:59 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=20=E6=9C=8D=E5=8A=A1?= =?UTF-8?q?=E7=AB=AFGetOSSToken=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Server/package.json | 2 + Server/src/APIs/Console/GetOSSToken.ts | 59 ++++++++++++++++++++++++++ Server/src/Server/Server.ts | 2 + Server/src/config.ts | 12 +++++- 4 files changed, 74 insertions(+), 1 deletion(-) create mode 100644 Server/src/APIs/Console/GetOSSToken.ts diff --git a/Server/package.json b/Server/package.json index 90ed791..aca2a40 100644 --- a/Server/package.json +++ b/Server/package.json @@ -11,10 +11,12 @@ "author": "", "license": "ISC", "devDependencies": { + "@types/ali-oss": "^6.16.11", "@types/cors": "^2.8.17", "@types/express": "^4.17.21", "@types/jsonwebtoken": "^9.0.6", "@types/node": "^20.12.12", + "ali-oss": "^6.21.0", "jsonwebtoken": "^9.0.2", "ts-node": "^10.9.2", "typescript": "^5.4.5" diff --git a/Server/src/APIs/Console/GetOSSToken.ts b/Server/src/APIs/Console/GetOSSToken.ts new file mode 100644 index 0000000..61f989e --- /dev/null +++ b/Server/src/APIs/Console/GetOSSToken.ts @@ -0,0 +1,59 @@ +import { API } from "../../Plugs/API/API"; +import ServerStdResponse from "../../ServerStdResponse"; +import { STS } from 'ali-oss' +import Auth from "../../Plugs/Middleware/Auth"; +import config from "../../config"; + +// 获取OSS Token +class GetOSSToken extends API { + constructor() { + super('GET', '/console/ossToken', Auth); + } + + public async onRequset(data: any, res: any) { + // 进行OSS_Upload_STS_Token获取 + let sts = new STS({ + accessKeyId: config.oss.accessKeyId, + accessKeySecret: config.oss.accessKeySecret + }); + let policy = { + "Version": "1", + "Statement": [ + { + "Effect": "Allow", + "Action": [ + // "oss:GetObject", + // "oss:PutObject", + // "oss:ListObject" + "oss:*" + ], + "Resource": [ + // `acs:oss:*:*:tone-personal/${config.oss.dir}/*`.toString() + "*" + // `acs:oss:*:tone-personal/*`.toString() + ] + } + ] + }; + try { + let sts_res = await sts.assumeRole(config.oss.roleArn, policy, config.oss.stsExpirationSec); + let sts_token: any = { + AccessKeyId: sts_res.credentials.AccessKeyId, + AccessKeySecret: sts_res.credentials.AccessKeySecret, + SecurityToken: sts_res.credentials.SecurityToken, + OSSRegion: config.oss.region, + Bucket: config.oss.bucket, + ExpirationSec: config.oss.stsExpirationSec, + } + this.logger.info('STS AssumeRol 成功'); + res.json({ ...ServerStdResponse.OK, data: sts_token }); + return; + } catch (error: any) { + this.logger.error('STS AssumeRole 获取时发生错误', error.message); + res.json(ServerStdResponse.SERVER_ERROR); + return; + } + } +} + +export default GetOSSToken; \ No newline at end of file diff --git a/Server/src/Server/Server.ts b/Server/src/Server/Server.ts index ab762d9..61d2b49 100644 --- a/Server/src/Server/Server.ts +++ b/Server/src/Server/Server.ts @@ -23,6 +23,7 @@ import SaveResource from '../APIs/Console/SaveResource' import DelResource from '../APIs/Console/DelResource' import SaveBlog from '../APIs/Console/SaveBlog' import DelBlog from '../APIs/Console/DelBlog' +import GetOSSToken from "../APIs/Console/GetOSSToken"; class Server { private logger = new Logger('Server'); @@ -52,6 +53,7 @@ class Server { this.apiLoader.add(GetBlogs) this.apiLoader.add(SaveBlog); this.apiLoader.add(DelBlog); + this.apiLoader.add(GetOSSToken); this.apiLoader.start(config.apiPort); } diff --git a/Server/src/config.ts b/Server/src/config.ts index bceb838..875eeb7 100644 --- a/Server/src/config.ts +++ b/Server/src/config.ts @@ -17,7 +17,17 @@ const config = { secret: '17e50223f4a545ec9e36ebf08e2f71bb', expiresIn: '1d', }, - apiPort: 8080, + oss: { + accessKeyId: '', + accessKeySecret: '', + roleArn: '', + bucket: '', + region: '', + callbackUrl: '', + dir: '', + stsExpirationSec: 3600 + }, + apiPort: 23500, } as const; export default config; \ No newline at end of file