Рубрики
Без рубрики

Пример хэширования пароля безопасности Spring

– Пример хэширования пароля безопасности Spring

В этом уроке мы покажем вам, как использовать BCryptPasswordEncoder для хэширования пароля и выполнения аутентификации при входе в Spring Security.

В старые времена, как правило, мы использовали MD5 Кодировщик Md5PasswordEncoder или SHA Кодер ShaPasswordEncoder алгоритм хэширования для кодирования пароля… вам по-прежнему разрешено использовать любой кодировщик, который вам нравится, но Spring рекомендует использовать BCRYPT BCryptPasswordEncoder , более сильный алгоритм хеширования со случайно сгенерированной солью.

Используемые технологии:

  1. Пружина 3.2.8. ОСВОБОЖДЕНИЕ
  2. Защита пружины 3.2.3.ОСВОБОЖДЕНИЕ
  3. Весенний JDBC 3.2.3.ВЫПУСК
  4. Сервер MySQL 5.6

1. Просмотреть кодировщик паролей

Знакомая старая аутентификация Кодировщик паролей интерфейс устарел…

package org.springframework.security.authentication.encoding;

//Implementation : Md5PasswordEncoder and ShaPasswordEncoder
@Deprecated
public interface PasswordEncoder {

Вместо этого вы должны использовать эту новую криптографию Кодировщик паролей интерфейс.

package org.springframework.security.crypto.password;

//Implementation : BCryptPasswordEncoder
public interface PasswordEncoder {

2. Создайте пароль BCrypt

Сначала хэшируйте пароль и поместите его в базу данных для последующей аутентификации при входе. В этом примере используется BCryptPasswordEncoder для хэширования пароля “123456”.

package com.mkyong.web.controller;

import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;

public class PasswordEncoderGenerator {

  public static void main(String[] args) {

	int i = 0;
	while (i < 10) {
		String password = "123456";
		BCryptPasswordEncoder passwordEncoder = new BCryptPasswordEncoder();
		String hashedPassword = passwordEncoder.encode(password);

		System.out.println(hashedPassword);
		i++;
	}

  }
}

В алгоритме хеширования BCrypt каждый раз генерируется другое хэш-значение длиной 60.

$2a$10$EblZqNptyYvcLm/VwDCVAuBjzZOI7khzdyGPBr08PpIi0na624b8.
$2a$10$trT3.R/Nfey62eczbKEnueTcIbJXW.u1ffAo/XfyLpofwNDbEB86O
$2a$10$teJrCEnsxNT49ZpXU7n22O27aCGbVYYe/RG6/XxdWPJbOLZubLIi2
$2a$10$BHG59UT6p7bgT6U2fQ/9wOyTIdejh4Rk1vWilvl4b6ysNPdhnViUS
$2a$10$W9oRWeFmOT0bByL5fmAceucetmEYFg2yzq3e50mcu.CO7rUDb/poG
$2a$10$HApapHvDStTEwjjneMCvxuqUKVyycXZRfXMwjU0rRmaWMsjWQp/Zu
$2a$10$GYCkBzp2NlpGS/qjp5f6NOWHeF56ENAlHNuSssSJpE1MMYJevHBWO
$2a$10$gwbTCaIR/qE1uYhvEY6GG.bNDQcZuYQX9tkVwaK/aD7ZLPptC.7QC
$2a$10$5uKS72xK2ArGDgb2CwjYnOzQcOmB7CPxK6fz2MGcDBM9vJ4rUql36
$2a$10$6TajU85/gVrGUm5fv5Z8beVF37rlENohyLk3BEpZJFi6Av9JNkw9O

Это нормально получать другое значение каждый раз, когда вы хэшируете значение с помощью BCrypt, потому что соль генерируется случайным образом. В этом уроке мы получаем первый вывод и вставляем его в базу данных.

3. База данных

Создайте таблицы и вставьте пользователя “mkyong” для тестирования.

CREATE  TABLE users (
  username VARCHAR(45) NOT NULL ,
  password VARCHAR(60) NOT NULL ,
  enabled TINYINT NOT NULL DEFAULT 1 ,
  PRIMARY KEY (username));

CREATE TABLE user_roles (
  user_role_id int(11) NOT NULL AUTO_INCREMENT,
  username varchar(45) NOT NULL,
  role varchar(45) NOT NULL,
  PRIMARY KEY (user_role_id),
  UNIQUE KEY uni_username_role (role,username),
  KEY fk_username_idx (username),
  CONSTRAINT fk_username FOREIGN KEY (username) REFERENCES users (username));

INSERT INTO users(username,password,enabled)
VALUES ('mkyong','$2a$10$EblZqNptyYvcLm/VwDCVAuBjzZOI7khzdyGPBr08PpIi0na624b8.', true);

INSERT INTO user_roles (username, role)
VALUES ('mkyong', 'ROLE_USER');
INSERT INTO user_roles (username, role)
VALUES ('mkyong', 'ROLE_ADMIN');

4. Включить Кодировщик Паролей

Несколько способов включить пароль, закодированный в конфигурации XML.

4.1 Использование по умолчанию BCryptPasswordEncoder .

  
	
	    
	
  

4.2 Передайте параметр “сила” в BCryptPasswordEncoder .

  
	
	    
	
  
	
  
	
  

4.3 Передайте кодировщик в DaoAuthenticationProvider .

  
	
	
  

  

4.4 Пример аннотации.

@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {

	@Autowired
	DataSource dataSource;
	
	@Autowired
	public void configAuthentication(AuthenticationManagerBuilder auth) 
		throws Exception {
		
		auth.jdbcAuthentication().dataSource(dataSource)
			.passwordEncoder(passwordEncoder())
			.usersByUsernameQuery("sql...")
			.authoritiesByUsernameQuery("sql...");
	}	
	
	@Bean
	public PasswordEncoder passwordEncoder(){
		PasswordEncoder encoder = new BCryptPasswordEncoder();
		return encoder;
	}

5. Демонстрация проекта

Доступ к защищенной паролем странице: локальный хост:8080/spring-безопасность-хеширование паролей/администратор , отображается страница входа в систему. Введите пароль “123456”, Spring Security будет хэшировать пароль и сравнивать его с хэшированным паролем из базы данных.

Пользователь и пароль в базе данных.

Скачать Исходный Код

Рекомендации

  1. Википедия: Bcrypt
  2. BCryptPasswordEncoder кодировщик javadoc
  3. Ссылка на безопасность Пружины: Кодировщик Паролей

Оригинал: “https://mkyong.com/spring-security/spring-security-password-hashing-example/”