用戶身分驗證流程——由註冊到已驗證的工作階段

一條用戶身分驗證流程,畫在一張互動畫布上:建立帳戶、憑據的雜湊與儲存、登入、建立工作階段,以及驗證受保護的請求。

用戶身分驗證流程,就是由某人建立帳戶一直到之後每一個請求都獲得信任的那條路徑:憑據在儲存之前先經雜湊,登入時再作核對,之後由一個工作階段權杖代替密碼。

用戶身分驗證流程——由註冊到已驗證的工作階段

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

  • 在一支新團隊設計他們第一個登入之前,先教會他們身分驗證安全的形狀。
  • 覆核一條身分驗證流程有沒有那些經典缺陷——儲存明文、比對明文、信任用戶端。
  • 為一場關於多重因素驗證的討論定調,並釐清它接入流程的位置。

運作方式

  1. 把各個角色改名為你的系統

    把用戶端應用程式與身分驗證服務換成你真實的組件——你的網頁應用程式、你的身分供應商——並補上這張通用圖漏掉的那些。

  2. 加上多重因素驗證

    在登入時、雜湊檢查與建立工作階段之間插入一個 MFA 步驟,並為第二因素的核對加一條分支。

  3. 畫出重設密碼的路徑

    在登入那個決策旁邊加一條重設分支——忘記密碼、重設權杖、設定新密碼——每一條都以一個明確的狀態結束。

  4. 註明權杖的生命週期

    在工作階段那個方框上,寫下你的權杖的有效期、撤銷與更新規則;如果你簽發的是 JWT,就連到 JWT 那張圖解。

常見問題

儲存密碼的安全做法是甚麼?

永遠不要儲存密碼本身。應該儲存一個加鹽的雜湊值——把密碼加上一段隨機的鹽之後套用一個單向函數——然後把明文丟棄。登入時,把傳入的密碼以同樣方式雜湊,再比對兩個雜湊值。如果資料庫外洩,攻擊者拿到的是他們無法逆轉的雜湊值,而這正是這張圖解裡那兩個雜湊方框要展示的性質。

雜湊與加密有甚麼分別?

加密是可逆的——有密鑰就可以還原出原本的值。雜湊是單向的——沒有密鑰,也沒有回頭路。對密碼而言你要的是雜湊,因為你以後再也不需要那段明文,只需要有能力核對。這張圖解寫的是雜湊而不是加密,正是為了這個理由;把密碼加密是一個常見而且危險的混淆。

工作階段權杖怎樣取代密碼?

登入成功之後,身分驗證服務會建立一個工作階段,並把一個權杖交給用戶端——可以是一個隨機值,也可以是一個已簽章的 JWT——用來代表這位已通過驗證的用戶。受保護的請求會帶著這個權杖,伺服器驗證它,而不會再要求輸入密碼。這正是身分驗證在重複的請求之下仍然可行的原因,也是權杖的有效期才是真正安全邊界的原因。

多重因素驗證在這條流程裡的位置在哪裡?

MFA 是登入時的一項額外檢查,在密碼通過核對之後、工作階段建立之前:用戶提供第二個因素——一次性驗證碼、驗證器應用程式、硬件密鑰。這張圖解的登入直欄就是這一步接入的地方。MFA 不會改動雜湊或工作階段的機制;它是在「雜湊值是否與儲存的一致?」這一個決策上加一重證明,把門檻抬高。

用 QueryChart(FlowJam)編輯這張圖解

把上面這張身分驗證畫布開啟為你自己的圖表——把各個角色改名為你的系統,並加上你真實的管控。

用 QueryChart(FlowJam)編輯這張圖解

互動圖解的更多內容