用戶身分驗證流程——由註冊到已驗證的工作階段
一條用戶身分驗證流程,畫在一張互動畫布上:建立帳戶、憑據的雜湊與儲存、登入、建立工作階段,以及驗證受保護的請求。
用戶身分驗證流程,就是由某人建立帳戶一直到之後每一個請求都獲得信任的那條路徑:憑據在儲存之前先經雜湊,登入時再作核對,之後由一個工作階段權杖代替密碼。
用戶身分驗證流程——由註冊到已驗證的工作階段
The interactive FlowJam canvas for this explanation — every lane, row and arrow above is a real QueryChart diagram you can open and edit.
How to read this visual
- 由左至右讀這三個直欄:註冊、登入、工作階段。
- 四條泳道就是四個角色,而密碼從不離開上面三條——只有雜湊值會到達「資料庫」那條泳道。
- 「雜湊值是否與儲存的一致?」這個決策把登入分成通往工作階段的路徑,以及「登入遭拒」這個拒絕出口。
註冊
「用戶建立帳戶」與「用戶端送出電郵與密碼」通往「身分驗證服務把密碼雜湊」——密碼由這一刻起不再可以還原。「雜湊後的憑據儲存到資料庫」是註冊的終點:資料庫此時持有的是一個加鹽的雜湊值,而它的備註說明了服務無法還原出明文,這正是雜湊的用意。
登入
「用戶用憑據登入」與「用戶端把憑據轉交身分驗證服務」重複了旅程的前半段,而「雜湊值是否與儲存的一致?」就是那次核對:傳入的密碼會以同樣方式雜湊,然後比對。「否」那條分支結束於「登入遭拒」;「是」那條分支則繼續前行,去建立工作階段。
工作階段
「身分驗證服務建立工作階段」簽發了那個取代密碼的權杖,「用戶端儲存工作階段權杖」把它移到用戶端,而「受保護的請求帶著權杖;伺服器驗證它」就是這套系統的穩定狀態——每一個受保護的請求都用權杖自證。「在該工作階段內授予存取權」把流程收結:用戶取得的是整個工作階段期間的身分驗證,而不是單一一個請求的。
Key relationships and takeaways
- 密碼在儲存之前先經雜湊——資料庫持有的是一個加鹽的單向雜湊值,永遠不是明文。
- 登入時比對的是雜湊值,所以身分驗證服務本身也還原不出儲存的密碼。
- 工作階段權杖在之後的請求裡取代了密碼,而這正是身分驗證得以在大規模下實際可行的原因。
- 儲存與驗證是分處不同泳道的兩件事,所以可以各自受到保護。
- 無論那個權杖是伺服器端的工作階段還是一個 JWT,這條流程的形狀都一樣——權杖本身的機制見 JWT 那張圖解。
When to use this visual
- 在一支新團隊設計他們第一個登入之前,先教會他們身分驗證安全的形狀。
- 覆核一條身分驗證流程有沒有那些經典缺陷——儲存明文、比對明文、信任用戶端。
- 為一場關於多重因素驗證的討論定調,並釐清它接入流程的位置。
運作方式
把各個角色改名為你的系統
把用戶端應用程式與身分驗證服務換成你真實的組件——你的網頁應用程式、你的身分供應商——並補上這張通用圖漏掉的那些。
加上多重因素驗證
在登入時、雜湊檢查與建立工作階段之間插入一個 MFA 步驟,並為第二因素的核對加一條分支。
畫出重設密碼的路徑
在登入那個決策旁邊加一條重設分支——忘記密碼、重設權杖、設定新密碼——每一條都以一個明確的狀態結束。
註明權杖的生命週期
在工作階段那個方框上,寫下你的權杖的有效期、撤銷與更新規則;如果你簽發的是 JWT,就連到 JWT 那張圖解。
常見問題
儲存密碼的安全做法是甚麼?
永遠不要儲存密碼本身。應該儲存一個加鹽的雜湊值——把密碼加上一段隨機的鹽之後套用一個單向函數——然後把明文丟棄。登入時,把傳入的密碼以同樣方式雜湊,再比對兩個雜湊值。如果資料庫外洩,攻擊者拿到的是他們無法逆轉的雜湊值,而這正是這張圖解裡那兩個雜湊方框要展示的性質。
雜湊與加密有甚麼分別?
加密是可逆的——有密鑰就可以還原出原本的值。雜湊是單向的——沒有密鑰,也沒有回頭路。對密碼而言你要的是雜湊,因為你以後再也不需要那段明文,只需要有能力核對。這張圖解寫的是雜湊而不是加密,正是為了這個理由;把密碼加密是一個常見而且危險的混淆。
工作階段權杖怎樣取代密碼?
登入成功之後,身分驗證服務會建立一個工作階段,並把一個權杖交給用戶端——可以是一個隨機值,也可以是一個已簽章的 JWT——用來代表這位已通過驗證的用戶。受保護的請求會帶著這個權杖,伺服器驗證它,而不會再要求輸入密碼。這正是身分驗證在重複的請求之下仍然可行的原因,也是權杖的有效期才是真正安全邊界的原因。
多重因素驗證在這條流程裡的位置在哪裡?
MFA 是登入時的一項額外檢查,在密碼通過核對之後、工作階段建立之前:用戶提供第二個因素——一次性驗證碼、驗證器應用程式、硬件密鑰。這張圖解的登入直欄就是這一步接入的地方。MFA 不會改動雜湊或工作階段的機制;它是在「雜湊值是否與儲存的一致?」這一個決策上加一重證明,把門檻抬高。
用 QueryChart(FlowJam)編輯這張圖解
把上面這張身分驗證畫布開啟為你自己的圖表——把各個角色改名為你的系統,並加上你真實的管控。