스프링 시큐리티 암호 처리

조승빈·2024년 5월 9일

Spring Security

목록 보기
3/11

PasswordEncoder

암호가 유효한지를 확인한다.

PasswordEncoder 예시코드

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

public class PasswordEncoderExample {
    public static void main(String[] args) {
        PasswordEncoder passwordEncoder = new BCryptPasswordEncoder();
        
        // 비밀번호 암호화
        String rawPassword = "mySecurePassword";
        // 주어진 암호를 해시합니다
        String encodedPassword = passwordEncoder.encode(rawPassword);
        System.out.println("Encoded Password: " + encodedPassword);

        // 비밀번호 검증
        boolean matches = passwordEncoder.matches(rawPassword, encodedPassword);
        System.out.println("Password matches: " + matches);
    }
}

passwordEncoder.encode(rawPassword)

일반적으로 해시는 암호화와 다르다. 해시 함수는 일방향 수학적 연산을 통해 원래의 데이터를 고정 길이의 문자열로 변환한다. 이 과정은 역변환이 불가능하며, 원래의 데이터를 복구할 수 없다.

encode() 에서 반환된 문자열은 항상 같은 PasswordEncoder의 match() 메서드로 검증할 수 있어야 한다.

DelegatingPasswordEncoder

DelegatingPasswordEncoder는 여러 PasswordEncoder 구현체 중 하나를 선택하여 사용할 수 있도록 해주는 인코더이다. 이 인코더는 비밀번호의 접두사를 사용하여 해당 비밀번호가 어떤 알고리즘을 사용해 인코딩되었는지를 식별한다. 예를 들어, {bcrypt} 접두사는 Bcrypt 알고리즘을 사용했음을 나타낸다.

{bcrypt} : Bcrypt 알고리즘을 사용합니다. (default)
{noop} : 비밀번호를 인코딩하지 않고 저장합니다 (주로 테스트 목적).
{pbkdf2} : PBKDF2 알고리즘을 사용합니다.
{scrypt} : Scrypt 알고리즘을 사용합니다.
{sha256} : SHA-256 알고리즘을 사용하는 표준 해시 함수입니다.

인증 흐름을 위해 자주 사용하는 인터페이스

  • UserDetails: 이 인터페이스는 Spring Security에서 사용자의 정보를 캡슐화한다. 사용자의 계정 정보, 권한, 계정의 잠김 상태 등을 포함할 수 있다. 주로 사용자의 인증 정보를 담고 있는 객체로 사용된다.
  • GrantedAuthority: 이 인터페이스는 애플리케이션 내에서 부여된 권한을 나타낸다. 일반적으로 사용자에게 허용되는 작업(역할)을 문자열로 나타내며, UserDetails 객체에 연결되어 사용된다.
  • UserDetailsService: 사용자의 이름(아이디)을 기반으로 UserDetails 객체를 조회하는 역할을 한다. 이 서비스는 인증 과정에서 주로 사용되며, 데이터베이스나 다른 저장소에서 사용자 정보를 불러오는 데 사용된다.
  • UserDetailsManager: UserDetailsService 인터페이스를 확장한 인터페이스로, UserDetails 객체의 생성, 수정, 삭제 등 사용자 세부 정보의 관리 기능을 추가적으로 제공한다. 사용자 계정을 관리하는 데 필요한 여러 추가적인 메서드를 포함한다.
  • PasswordEncoder: 비밀번호를 안전하게 처리하기 위한 인터페이스로, 비밀번호를 해시하거나 암호화하는 메서드와, 제공된 인코딩된 비밀번호 문자열을 원본 비밀번호와 비교하는 메서드를 제공한다. 이를 통해 저장된 비밀번호와 사용자가 입력한 비밀번호를 비교하여 인증 과정에서의 보안을 강화한다.
profile
평범

0개의 댓글