上篇原本想說是最後一個常見的 系統元件 了
今天借朋友的筆電登入 ItHome 帳號才驚覺...忘記講 使用者驗證了!
於是想了想, 不如就把一些沒打算講的元件也一併講好了XD
所以預計在進入 Scaling 之前, 還會繼續介紹
今天就先繼續講 使用者驗證吧
使用者驗證涵蓋的範圍也相當廣泛, 從簡單的 帳號密碼登入 到複雜的 2FA
我們一樣來看看各種驗證方式的特點和適用情境
預計會介紹以下幾個
...落落長的清單@@
希望在看完本文後, 大家能夠有基本的了解
最常見的使用者驗證機制
只要使用者輸入 帳號 和 密碼 就能驗證了
聽起來很合理, 但是具體是怎麼做的呢?
直覺來想, 我們只要檢查使用者輸入的 密碼 和 註冊時的密碼 (存在我們伺服器) 相同即可
(反過來不行XD)
所以流程會是
最簡單的 使用者驗證 服務就完成了
登出也很簡單, 只需要把使用者的 Session 清掉即可
那麼重設密碼呢?
相信大家都有過忘記密碼的經驗XD
在我們點下 Forgot Password?
或是 Reset Password
的按鈕後, 到我們收到重設密碼的驗證信, 這中間發生了什麼事? 為什麼不給我當初註冊的密碼就好?
(題外話: 這邊就不解釋 Hash 的原理, 只要知道 被 Hash 後的字串是無法還原的即可)
由於大部分人在註冊各種服務時, 都是用相同的密碼 (可以想想自己 ItHome 的密碼是不是和其他網站相同XD)
為了避免 Database 資料外洩 (如惡意攻擊, 不小心洩漏等) 時, 所有人的密碼都被看光光, 我們的服務可以在使用者註冊時 "先將密碼 Hash 後再存起來" (這叫做非明文儲存)
比如:
密碼用明文儲存
username: erichung0404
password: ironmen2024
Hash 後儲存 (比如 HMAC-SHA-256)
username: erichung0404
password: 5dc0ab517531e04d4ca0479090cecb579404f2400dcb44a47b805a61e32c385f
(Hash 演算法也有很多種, 這邊就不一一介紹, 有興趣可以自行查閱, 這邊提供幾種常用來 Hash 密碼的演算法: HMAC-SHA-256, PBKDF2, Argon2 etc.)
由於 Hash 的特性是 "無法還原", 所以萬一我們忘記密碼, 服務也只知道我們 "Hash 後的密碼", 就算拿 Hash 後的密碼再 Hash 一次, 也不會是原本的密碼!
這就是為什麼只能重設密碼了~
優點: 簡單快速
缺點: 可能被暴力破解, 無法 "確認使用者身份" (比如我拿我朋友的電腦或手機登入服務)
適用場景有: 頻繁登入, 使用者體驗重要 且 不包含個人敏感性資訊 的服務或應用 (如遊戲, 不包含使用者敏感資料的網站等)
為了避免密碼被暴力破解, 我們可以用 一次性密碼 增加安全性
步驟大致如下
通常搭配 2FA 使用
優點: 比傳統帳密驗證安全性更高
缺點: 流程較複雜, 無法 "確認使用者身份"
就是常聽見的 兩階段驗證 (或是雙重驗證, 雙因素驗證), 這邊簡單介紹一下概念
2FA 將 "身份驗證" 分為四個面向, 並從中選擇兩個組合作為 身份驗證 機制
一般 2FA 都是由 知識因素 搭配 持有因素或生物因素
即是 "只有使用者知道" 的因素, 比如 帳密驗證 中的密碼
上面已經介紹過就不贅述
即 "只有使用者持有" 的因素, 比如 手機, 私人電腦 等等
手機由電信業者提供, 理論上會綁定身分證 (Know your customer, KOC), 所以可以視為持有人即為 該服務使用者 (除非手機被偷...), 就可以透過 簡訊 寄送 OTP 達成 2FA 效果
使用情境如: 手機應用程式
由於 持有因素 "還不夠證明你真的是 服務使用者", 因為 持有物品 可能被偷走或盜用
所以更為嚴謹的方式是透過 生物驗證, 比如 人臉辨識, 指紋辨識, 聲音辨識 等等
這些資訊屬於 敏感性資料, 所以根據 General Data Protection Regulation (GDPR) 應將其 "去識別化"
(題外話, 雖然 GDPR 是 歐盟 (EU) 的法規, 但由於網路的無界特性, 如果我們的服務會面向 EU 使用者, 有可能會被告, 當然自營應該機會不大XD)
和前面針對 密碼 處理 (Hash) 的概念類似, 都需要 "去識別化" 後才儲存在 伺服器
但相對於 密碼的 Hash, 生物特徵 則是透過 "特徵提取" (由使用者設備負責)
使用情境如: 交易驗證, 銀行服務登入 等需要 KYC 的服務
根據 使用者 的使用習慣來辨識, 有以下幾種
比如 打字的節奏, 按鍵間隔, 按壓時間 等特徵來驗證身份
適用情境: 銀行服務, 公司內部系統
使用滑鼠的行為模式, 比如移動速度, 點擊頻率, 移動軌跡等
適用情境: 常用於在線應用和網頁安全驗證,特別是在防範機器人攻擊時。
比如 手機, 平板 的觸摸模式, 包括 觸摸力道, 滑動速度, 觸點數量等
適用情境: 通常用在 行動支付
比如 瀏覽習慣, 點擊模式, 停留時間 等來識別
適用情境: 比如 電商網站, 社群網站 等
比如 手寫簽名和手勢操作 等
適用情境: 電子簽名