该项目的目标是为 AWS S3 存储桶(每个用户都有一个“文件夹”的共享 S3 存储桶)下的用户提供一个空间,并提供一个用于上传、浏览、下载和删除文件的 Web 界面。
这个 PoC 是在 asamo7 和 davidayalas 之间完成的。
特征:
可以设置“用户”和“管理员”。
用户将其用户名(来自 saml 响应的电子邮件)添加到每个键(上传、浏览、删除...)。管理员可以查看存储桶或文件夹下的所有内容。请参阅权限.csv。
用户可以上传文件夹(拖放)并在 S3 中重新创建结构
可以下载文件(不是目录)
文件夹可删除(包含不为空)
用户可以创建文件夹
安装无服务器框架:https://www.serverless.com/framework/docs/getting-started/
设置AWS凭证:https://www.serverless.com/framework/docs/providers/aws/cli-reference/config-credentials/
在 setup.demo.json 中将“serviceName”更新为您自己的
执行first-deploy.sh(赋予可执行权限)
$ chmod +x first-deploy.sh && sh first-deploy.sh
它会修改一些文件以使所有工作正常。转到 https://samltest.id/upload.php 并手动上传 docs/sp-metadata.xml。
运行你的服务器并尝试
$ npm run serve --prefix=frontend
安装所有依赖项
$ npm install serverless-s3-sync
$ npm --prefix ./backend/custom-auth install ./backend/custom-auth
$ npm --prefix ./backend/login install ./backend/login
$ npm --prefix ./frontend install ./frontend
在 setup.demo.json 中将“serviceName”更新为您自己的
SAML 的基本环境变量(您自己的,因为演示已设置):
生成前端分发
$ cd frontend
$ npm run build
部署演示
$ sls deploy
$ sls info | grep GET -m 1 | awk -F[/:] '{printf "const endpoint={get(){return '''https://"$4"/demo/''';}};export default endpoint;"}' > frontend/src/assets/js/endpoint.js
$ sls s3sync
使用以下内容更新 sp-metadata.xml:
将此文件上传到 https://samltest.id/upload.php
上传:此 lambda 生成有效上传的签名。
浏览:此 lambda 检索路径中的对象
删除:此 lambda 递归删除路径中的所有对象
下载:此 lambda 生成预签名 URL,以便安全下载对象
登录:在本例中基于 SAML 生成 JWT 令牌。
默认设置指向 samltest.id。 samltest.id 的元数据是使用 https://www.samltool.com/sp_metadata.php 生成的:
在“属性使用服务端点(HTTP-POST)”中,您必须放置您的 api 端点:
https://${api gateway id}.execute-api.${region}.amazonaws.com/${stage}/login/callback
在“entityID”中更新您的颁发者(与 serverless.yml 中登录处理程序的环境变量相同)
自定义授权者:验证 JWT 令牌并从 CSV 添加额外权限
新前端是基于 Vue 的。然后按照入门指南进行操作
创建文件“frontend/src/assets/js/endpoint.js”,其中以下内容用 aproppiate 替换值
const endpoint = {
get ( ) {
return 'https://${your api id}/${your stage}/' ;
}
} ;
export default endpoint ;
或者您可以从 sls info 输出生成它:
$ sls info | grep GET -m 1 | awk -F[/:] '{printf "const endpoint={get(){return '''https://"$4"/demo/''';}};export default endpoint;"}' > frontend/src/assets/js/endpoint.js