1. 概述
Spring Boot CLI(命令行界面)是一個用於從命令行運行和測試 Spring Boot 應用程序的 Spring Boot 工具。 此工具提供了一個非常實用的功能,即編碼密碼。 該工具的主要目的是避免暴露明文密碼,並能夠生成和使用編碼後的密碼
在本教程中,我們將深入瞭解 Spring Security 世界,學習如何使用 Spring Boot CLI 編碼密碼
2. 密碼編碼
密碼編碼是指將密碼錶示為可存儲在存儲介質上的二進制格式的一種方式。我們可以使用 Spring Security 編碼密碼,也可以委託給 Spring Boot CLI。
2.1. Spring Security PasswordEncoder
Spring Security 提供 PasswordEncoder 接口,該接口有許多實現,例如 StandardPasswordEncoder 和 BCryptPasswordEncoder。
此外,Spring Security 建議使用 BCryptPasswordEncoder,它基於強大的算法和隨機生成的鹽。在框架的先前版本中,可以使用 MD5PasswordEncoder 或 SHAPasswordEncoder 類,但由於其算法的弱點,它們現在已棄用。
此外,這兩個類強制開發人員將鹽作為構造參數傳遞,而 BCryptPasswordEncoder 會內部生成隨機鹽。 BCryptPasswordEncoder 生成的字符串的長度為 60 個字符,因此基礎列應接受該大小的字符串。
另一方面,StandardPasswordEncoder 類基於 SHA-256 算法。
顯然,在第三方系統中創建的密碼必須根據 Spring Security 中選擇的編碼類型進行編碼,才能成功進行身份驗證。
2.2. Spring Boot CLI 密碼編碼器
Spring Boot CLI 包含許多命令之一是 encodepassword。此命令允許編碼密碼,用於與 Spring Security 一起使用。簡單地説,Spring Boot CLI encodepassword 命令可以直接將原始密碼轉換為加密的密碼,使用以下語法:
spring encodepassword [選項] <要編碼的密碼>
值得注意的是,從 Spring Security 5.0 開始,密碼編碼的默認機制是 BCrypt。
3. 示例
為了闡明使用 Spring Boot CLI 的密碼編碼機制,我們將使用一個基本的身份驗證服務來通過用户名和密碼驗證用户。對於此示例,我們將簡單地使用 spring security 自配置。
想法是避免暴露明文密碼,而是使用加密後的密碼。現在讓我們看看如何使用 encodepassword 命令,使用 Spring Boot CLI 對密碼進行加密。我們只需要在命令提示符中執行以下命令:
spring encodepassword baeldungPassword
上述命令的結果是使用 BCrypt 加密的密碼,非常難以破解。例如,用於 Spring Boot Security 配置的加密密碼如下所示:
{bcrypt}$2y$10$R8VIwFiQ7aUST17YqMaWJuxjkCYqk3jjPlSxyDLLzqCTOwFuJNq2a
現在讓我們自定義默認的安全配置,通過修改屬性文件。例如,我們可以通過添加自己的用户名和密碼來覆蓋默認值。
我們的加密密碼存儲在 spring.security.user.password 屬性中:
spring:
security:
user:
name: baeldung
password: '{bcrypt}$2y$10$R8VIwFiQ7aUST17YqMaWJuxjkCYqk3jjPlSxyDLLzqCTOwFuJNq2a'
4. 結論
在本文中,我們學習瞭如何使用 Spring Boot CLI 對密碼進行編碼。 此外,我們還使用了 Spring Security 簡單身份驗證來演示如何使用編碼後的密碼。 主要目的是避免暴露明文密碼,並能夠輕鬆地生成編碼後的密碼。