密碼政策 (Password Policy)
Logto 會根據密碼的建立或更新方式,以不同方式套用密碼政策:
- 端使用者流程,例如 預設的登入體驗、使用體驗 API (Experience API) 以及 Account API 都會強制執行目前的 密碼政策。
- 透過 Management API
patch /api/users/{userId}/password進行的管理員操作則不受限制,讓你在需要時可不經政策檢查進行帳號佈建或重設密碼。 - 若要依現行規則稽核現有密碼,請呼叫
POST /api/sign-in-exp/default/check-password並根據回傳的驗證結果採取行動。詳情請參閱 密碼合規性檢查。
設定密碼政策
針對新使用者或更新密碼的使用者,你可以設定密碼政策以強制密碼強度要求。請前往 Console > 安全性 > 密碼政策 設定密碼政策。
- 最小密碼長度:設定密碼所需的最少字元數。(NIST 建議至少 8 個字元)
- 最少需包含的字元類型數:設定密碼需包含的最少字元類型數。可用的字元類型有:
- 大寫字母:(A-Z)
- 小寫字母:(a-z)
- 數字:(0-9)
- 特殊字元:
(!"#$%&'()\*+,-./:;<>=?@[]^\_`|{}~ )
- 資料外洩歷史檢查:啟用此設定可拒絕曾在資料外洩事件中曝光過的密碼。(由 Have I Been Pwned 提供支援)
- 重複字元檢查:啟用此設定可拒絕包含重複字元的密碼。(例如 "11111111" 或 "password123")
- 使用者資訊檢查:啟用此設定可拒絕包含使用者資訊(如使用者名稱、電子郵件或電話號碼)的密碼。
- 自訂關鍵字:提供一組自訂(不區分大小寫)關鍵字,密碼中若包含將被拒絕。
密碼到期
密碼到期會要求使用者在設定天數後重設密碼。你也可以手動讓特定使用者的密碼到期,例如當你知道密碼已外洩時。
此政策僅在使用者於密碼登入時輸入正確密碼後才會檢查。使用驗證碼、社交登入、單一登入 (SSO) 或通行密鑰登入的使用者不受影響。
啟用密碼到期
前往 Console > 安全性 > 密碼政策,找到 密碼到期 (Password expiration) 卡片:
- 開啟 啟用密碼到期 (Enable password expiration)。
- 設定 密碼有效天數 (Password valid period, days),範圍為 1 至 9999 天。
- 儲存變更。
只要登入體驗中至少有一種 忘記密碼 方法(電子郵件或電話)且有可用連接器,開關才會啟用,因為使用者只能透過該流程重設過期密碼。基於同樣原因,啟用政策後,不能刪除最後一個支援忘記密碼的電子郵件或簡訊連接器。如果你的註冊流程不要求電子郵件或電話,部分使用者可能無法收到重設碼,建議在註冊時收集其中一項資訊。
Logto 會記錄使用者密碼最後設定或變更的時間。當密碼達到有效期限時,使用者下次密碼登入會被阻擋,直到重設密碼。沒有密碼變更紀錄的使用者,會從你啟用政策的時間開始計算,因此啟用政策不會讓所有人密碼同時過期。關閉再重新啟用政策會重設起始時間。
當使用者透過忘記密碼、Account API 或 Management API 設定新密碼時,密碼年齡會重設,任何手動到期也會清除。
手動讓使用者密碼到期
啟用密碼到期政策後,你可以強制特定使用者在下次登入時重設密碼:
-
Console:前往 Console > 使用者管理,打開使用者詳細頁,點擊密碼旁的 到期 (Expire),並確認操作。僅當使用者有密碼時按鈕才會顯示。
-
Management API:呼叫
PATCH /api/users/{userId}/password/expiration,body 如下:{"isExpired": true}
若未啟用政策,API 會回傳 400 並帶有錯誤碼 sign_in_experiences.password_expiration_not_enabled,Console 的 到期 (Expire) 按鈕也會停用。
常見情境如密碼已知外洩。讓密碼到期可要求使用者先以驗證碼證明擁有電子郵件或電話,才能設定新密碼並再次登入。如果你只想手動讓密碼到期,而不想強制所有使用者定期更換密碼,可將有效天數設為較長,例如 3650 天。
讓密碼到期不會讓使用者登出現有會話。若需立即切斷存取,請同時 撤銷使用者的有效會話 及 已授權的第三方應用程式。
終端使用者會看到什麼
當使用者以過期密碼登入時,輸入正確密碼後,登入頁會顯示提示:「你的密碼已過期,必須重設後才能登入。」點擊 重設密碼 (Reset password) 會將使用者帶到忘記密碼流程,並自動帶入識別資訊。驗證電子郵件或電話收到的驗證碼並設定新密碼後,即可再次登入。
如果你用 Experience API 自行建構登入 UI,密碼驗證請求會以錯誤碼 password.expired(HTTP 422)失敗。請處理此錯誤,將使用者導向你的密碼重設流程。
密碼合規性檢查
在 Logto 更新密碼政策後,現有使用者仍可用原密碼登入。只有新建立的帳號才會強制遵循新政策。
若需強化安全性,你可以使用 POST /api/sign-in-exp/default/check-password API 檢查使用者密碼是否符合預設登入體驗下的現行政策。若不符合,可透過自訂流程搭配 Account API 提示使用者更新密碼。