使用 Spring Boot CLI 對密碼進行編碼
一、概述
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 [options] <password to encode>
值得注意的是,從 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 簡單身份驗證來演示如何使用編碼後的密碼。主要目的是避免暴露純文本密碼並能夠輕鬆生成編碼密碼。
與往常一樣,本教程的完整代碼可在 GitHub 上獲得。