Closed arealclimber closed 3 months ago
title iSunFA Login
participant "User" as User
participant "Front-end" as Frontend
participant "Back-end" as Backend
participant "Database" as Database
User->>Frontend: 觸發登入
activate User
activate Frontend
Frontend->Backend: 請求 challenge
activate Backend
Backend->Database: 從資料庫拿取 challenge
activate Database
Backend<--Database: 返回 challenge
deactivate Database
Frontend<--Backend: 返回 challenge
deactivate Backend
User<--Frontend:使用 challenge 跟 client.authenticate 觸發用戶生物認證或裝置密碼認證
User->Frontend:用戶通過認證後返回 authentication
alt#2c92f2 有邀請碼
Frontend->>Backend: 呼叫 signInAPI 並傳遞 authentication 和 invitation
activate Backend
Backend->Database: 從資料庫拿取 challenge
activate Database
Backend<--Database: 返回 challenge
deactivate Database
alt#abffc1 登入成功
Backend->Database:從資料庫根據 credentialId 拿取 user 資料
activate Database
Backend<--Database:返回 getUser
deactivate Database
Backend->>Backend: 使用 challenge, getUser 跟呼叫 server.verifyAuthentication 驗證登入成功
Backend->>Backend: 設置 session.userId 為 getUser.id
Backend->>Database: 更新邀請碼狀態並創建管理員
activate Database
Database-->>Backend: 返回結果
deactivate Database
Backend-->>Frontend: 返回 getUser
deactivate Backend
Frontend->>Frontend: 設置用戶相關狀態
Frontend-->>User: 登入成功,顯示用戶資訊
else 登入失敗
alt#ffc5ab 1.FIDO2 驗證失敗
Frontend->>Backend: 呼叫 signInAPI 並傳遞 authentication 和 invitation
activate Backend
Backend->Database: 從資料庫拿取 challenge
activate Database
Backend<--Database: 返回 challenge
deactivate Database
Backend->Database:從資料庫根據 credentialId 拿取 user 資料
activate Database
Backend<--Database:返回 getUser
deactivate Database
Backend->>Backend: 使用 challenge, getUser 跟呼叫 server.verifyAuthentication 驗證登入失敗
Backend-->>Frontend: 返回錯誤訊息
deactivate Backend
Frontend-->>User: 登入失敗,顯示錯誤訊息
end
alt#ffc5ab 2.在資料庫找不到用戶
Frontend->>Backend: 呼叫 signInAPI 並傳遞 authentication 和 invitation
activate Backend
Backend->Database: 從資料庫拿取 challenge
activate Database
Backend<--Database: 返回 challenge
deactivate Database
Backend->Database:從資料庫根據 credentialId 拿取 user 資料
activate Database
Backend<--Database:找不到 getUser
deactivate Database
Backend-->>Frontend: 返回錯誤訊息
deactivate Backend
Frontend-->>User: 登入失敗,顯示錯誤訊息
end
alt#ffc5ab 3.創建管理員失敗
Frontend->>Backend: 呼叫 signInAPI 並傳遞 authentication 和 invitation
activate Backend
Backend->Database: 從資料庫拿取 challenge
activate Database
Backend<--Database: 返回 challenge
deactivate Database
Backend->Database:從資料庫根據 credentialId 拿取 user 資料
activate Database
Backend<--Database:返回 getUser
deactivate Database
Backend->>Backend: 使用 challenge, getUser 跟呼叫 server.verifyAuthentication 驗證登入成功
Backend->>Backend: 設置 session.userId 為 getUser.id
Backend->>Database: 更新邀請碼狀態並創建管理員
activate Database
Database-->>Backend: 創建管理員失敗
deactivate Database
Backend-->>Frontend: 返回錯誤訊息
Frontend-->>User: 登入失敗,顯示錯誤訊息
end
end
else 無邀請碼
alt#abffc1 登入成功
Frontend->>Backend: 呼叫 signInAPI 並傳遞 authentication
Backend->Database: 從資料庫拿取 challenge
activate Database
Backend<--Database: 返回 challenge
deactivate Database
Backend->Database:從資料庫根據 credentialId 拿取 user 資料
activate Database
Backend<--Database:返回 getUser
deactivate Database
Backend->>Backend: 使用 challenge, getUser 跟呼叫 server.verifyAuthentication 驗證登入成功
Backend->>Backend: 設置 session.userId 為 getUser.id
Backend-->>Frontend: 返回getUser
deactivate Backend
Frontend->>Frontend: 設置用戶相關狀態
Frontend-->>User: 登入成功,顯示用戶資訊
else 登入失敗
alt#ffc5ab 1.FIDO2 驗證失敗
Frontend->>Backend: 呼叫 signInAPI 並傳遞 authentication
activate Backend
Backend->Database: 從資料庫拿取 challenge
activate Database
Backend<--Database: 返回 challenge
deactivate Database
Backend->Database:從資料庫根據 credentialId 拿取 user 資料
activate Database
Backend<--Database:返回 getUser
deactivate Database
Backend->>Backend: 使用 challenge, getUser 跟呼叫 server.verifyAuthentication 驗證登入失敗
Backend-->>Frontend: 返回錯誤訊息
deactivate Backend
Frontend-->>User: 註冊失敗,顯示錯誤訊息
end
alt#ffc5ab 2.在資料庫找不到用戶
Frontend->>Backend: 呼叫 signInAPI 並傳遞 authentication
activate Backend
Backend->Database: 從資料庫拿取 challenge
activate Database
Backend<--Database: 返回 challenge
deactivate Database
Backend->Database:從資料庫根據 credentialId 拿取 user 資料
activate Database
Backend<--Database:找不到 getUser
deactivate Database
Backend-->>Frontend: 返回錯誤訊息
deactivate Backend
Frontend-->>User: 註冊失敗,顯示錯誤訊息
deactivate User
deactivate Frontend
end
end
end
title 02 - iSunFA Login
participant "User" as User
participant "Front-end" as Frontend
participant "Back-end" as Backend
participant "Database" as Database
User->>Frontend: 觸發登入
activate User
activate Frontend
Frontend->Backend: 請求 challenge
activate Backend
Backend->Database: 從資料庫拿取 challenge
activate Database
Backend<--Database: 返回 challenge
deactivate Database
Frontend<--Backend: 返回 challenge
deactivate Backend
User<--Frontend:使用 challenge 跟 client.authenticate 觸發用戶生物認證或裝置密碼認證
User->Frontend:用戶通過認證後返回 authentication
alt#2c92f2 有邀請碼
Frontend->>Backend: 呼叫 signInAPI 並傳遞 authentication 和 invitation
activate Backend
Backend->Database: 從資料庫拿取 challenge
activate Database
Backend<--Database: 返回 challenge
deactivate Database
alt#abffc1 登入成功
Backend->Database:從資料庫根據 credentialId 拿取 user 資料
activate Database
Backend<--Database:返回 getUser
deactivate Database
Backend->>Backend: 使用 challenge, getUser 跟呼叫 server.verifyAuthentication 驗證登入成功
Backend->>Backend: 設置 session.userId 為 getUser.id
Backend->>Database: 更新邀請碼狀態並創建管理員
activate Database
Database-->>Backend: 返回結果
deactivate Database
Backend-->>Frontend: 返回 getUser
deactivate Backend
Frontend->>Frontend: 設置用戶相關狀態
Frontend-->>User: 登入成功,顯示用戶資訊
else 登入失敗
alt#ffc5ab 1.FIDO2 驗證失敗
Frontend->>Backend: 呼叫 signInAPI 並傳遞 authentication 和 invitation
activate Backend
Backend->Database: 從資料庫拿取 challenge
activate Database
Backend<--Database: 返回 challenge
deactivate Database
Backend->Database:從資料庫根據 credentialId 拿取 user 資料
activate Database
Backend<--Database:返回 getUser
deactivate Database
Backend->>Backend: 使用 challenge, getUser 跟呼叫 server.verifyAuthentication 驗證登入失敗
Backend-->>Frontend: 返回錯誤訊息
deactivate Backend
Frontend-->>User: 登入失敗,顯示錯誤訊息
end
alt#ffc5ab 2.在資料庫找不到用戶
Frontend->>Backend: 呼叫 signInAPI 並傳遞 authentication 和 invitation
activate Backend
Backend->Database: 從資料庫拿取 challenge
activate Database
Backend<--Database: 返回 challenge
deactivate Database
Backend->Database:從資料庫根據 credentialId 拿取 user 資料
activate Database
Backend<--Database:找不到 getUser
deactivate Database
Backend-->>Frontend: 返回錯誤訊息
deactivate Backend
Frontend-->>User: 登入失敗,顯示錯誤訊息
end
alt#ffc5ab 3.創建管理員失敗
Frontend->>Backend: 呼叫 signInAPI 並傳遞 authentication 和 invitation
activate Backend
Backend->Database: 從資料庫拿取 challenge
activate Database
Backend<--Database: 返回 challenge
deactivate Database
Backend->Database:從資料庫根據 credentialId 拿取 user 資料
activate Database
Backend<--Database:返回 getUser
deactivate Database
Backend->>Backend: 使用 challenge, getUser 跟呼叫 server.verifyAuthentication 驗證登入成功
Backend->>Backend: 設置 session.userId 為 getUser.id
Backend->>Database: 更新邀請碼狀態並創建管理員
activate Database
Database-->>Backend: 創建管理員失敗
deactivate Database
Backend-->>Frontend: 返回錯誤訊息
Frontend-->>User: 登入失敗,顯示錯誤訊息
end
end
else 無邀請碼
alt#abffc1 登入成功
Frontend->>Backend: 呼叫 signInAPI 並傳遞 authentication
Backend->Database: 從資料庫拿取 challenge
activate Database
Backend<--Database: 返回 challenge
deactivate Database
Backend->Database:從資料庫根據 credentialId 拿取 user 資料
activate Database
Backend<--Database:返回 getUser
deactivate Database
Backend->>Backend: 使用 challenge, getUser 跟呼叫 server.verifyAuthentication 驗證登入成功
Backend->>Backend: 設置 session.userId 為 getUser.id
Backend-->>Frontend: 返回getUser
deactivate Backend
Frontend->>Frontend: 設置用戶相關狀態
Frontend-->>User: 登入成功,顯示用戶資訊
else 登入失敗
alt#ffc5ab 1.FIDO2 驗證失敗
Frontend->>Backend: 呼叫 signInAPI 並傳遞 authentication
activate Backend
Backend->Database: 從資料庫拿取 challenge
activate Database
Backend<--Database: 返回 challenge
deactivate Database
Backend->Database:從資料庫根據 credentialId 拿取 user 資料
activate Database
Backend<--Database:返回 getUser
deactivate Database
Backend->>Backend: 使用 challenge, getUser 跟呼叫 server.verifyAuthentication 驗證登入失敗
Backend-->>Frontend: 返回錯誤訊息
deactivate Backend
Frontend-->>User: 註冊失敗,顯示錯誤訊息
end
alt#ffc5ab 2.在資料庫找不到用戶
Frontend->>Backend: 呼叫 signInAPI 並傳遞 authentication
activate Backend
Backend->Database: 從資料庫拿取 challenge
activate Database
Backend<--Database: 返回 challenge
deactivate Database
Backend->Database:從資料庫根據 credentialId 拿取 user 資料
activate Database
Backend<--Database:找不到 getUser
deactivate Database
Backend-->>Frontend: 返回錯誤訊息
deactivate Backend
Frontend-->>User: 註冊失敗,顯示錯誤訊息
deactivate User
deactivate Frontend
end
end
end
title 03 - iSunFA Continuous Login
participant "User" as User
participant "Front-end" as Frontend
participant "Back-end" as Backend
participant "Database" as Database
User->>Frontend: 進入登入頁面(請求網站資源)
activate User
activate Frontend
Frontend->>Backend: 請求 session(檢查 cookie-session)
activate Backend
Backend->>Backend:驗證 session
alt#2c92f2 Session 有效
Backend->Backend:session 有效
Backend->Database:請求用戶資料
activate Database
Database-->>Backend: 返回用戶資料
deactivate Database
Backend-->>Frontend: 返回用戶資料
Frontend-->>User: 顯示用戶資料
else Session 無效
Backend->>Backend:Session 無效
Backend-->>Frontend: Session 無效,請求重新登入
deactivate Backend
Frontend-->>User: 顯示登入頁面
deactivate User
deactivate Frontend
end
note over User#salmon: 01 - iSunFA Registration or 02 - iSunFA Login
took 3 hrs done