1. 概述
Spring Boot CLI(命令行界面)是一個用於從命令行運行和測試 Spring Boot 應用程序的 Spring Boot 工具。 該工具提供了一個非常有用的功能,即編碼密碼。 該工具的主要目的是避免暴露明文密碼,並能夠生成和使用編碼後的密碼
在本教程中,我們將深入瞭解 Spring Security 世界,學習如何使用 Spring Boot CLI 編碼密碼
2. 密碼編碼
密碼編碼是指將密碼錶示為可存儲在存儲介質上的二進制格式的一種方法。我們可以使用 Spring Security 對密碼進行編碼,也可以委託給 Spring Boot CLI。
2.1. Spring Security PasswordEncoder < /em>
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 [options] <password to encode>需要注意的是,從 Spring Security 5.0 版本開始,默認的密碼編碼機制是 BCrypt。
3. 示例
為了闡明使用 Spring Boot CLI 的密碼編碼機制,我們將使用一個基本的身份驗證服務來通過用户名和密碼驗證用户。對於這個示例,我們將簡單地使用 Spring Security 自定義配置。
想法是避免暴露明文密碼,而是使用加密後的密碼。現在讓我們看看如何使用 <em >encodepassword</em> 命令在 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 簡單的身份驗證機制,以演示如何使用編碼後的密碼。 主要目的是避免暴露明文密碼,並能夠輕鬆地生成編碼後的密碼。