該專案的目標是在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