이 강의에서는
Spring Security 프레임워크 내부의
PasswordEncoder 인터페이스와
그 다양한 구현에 대해 심도 있게 다루겠습니다
PasswordEncoder는 인터페이스이며
두 개의 추상 메소드와 한 개의 기본 메소드가 있습니다
첫 번째 추상 메소드는 encode입니다
이 encode 메소드는
엔드 유저의 등록 절차에서 활용할 수 있습니다
이 encode 메소드는
엔드 유저가 등록 절차에서 입력한
일반 텍스트 비밀번호를 본다면
이 rawPassword 또는
일반 텍스트 비밀번호를
여러분이 사용하는 PasswordEncoder에 기반해
해시 문자열 또는 암호화된 값으로 변환합니다
이 메소드의 이름이 encode지만
인코딩 작업이 일어나는 것은 아닙니다
여러분이 사용하는 PasswordEncoder에 기반해
그에 상응하는 해싱 알고리즘과 해싱 절차가
배경에서 일어납니다
이 encode 메소드 다음
두 번째 추상 메소드인 matches가 있습니다
matches는 로그인 작업에서
유저가 입력한 비밀번호와
데이터베이스에 이미 저장된 비밀번호를
비교하기 위해 사용해야 하는 메소드입니다
이 matches 메소드는
엔드 유저가 로그인 작업에서
입력한 rawPassword를 받습니다
두 번째 매개변수는
encodedPassword 또는 loadUserByUsername의
도움으로 데이터베이스에서
불러온 해시 비밀번호입니다
이 두 개의 매개변수는
배경에서 이 matches 메소드는
먼저 동일한 해싱 알고리즘을 사용해
rawPassword를 해싱하는 로직을 가집니다
그 다음 두 개의 해시 문자열을 비교하고
이들의 해시값을 유도합니다
해시값이 동일하다면
이 matches 메소드는 true로 반환하고
이 시나리오에서
로그인 작업은 성공적입니다
반대로 해시값이 일치하지 않는다면
matches 메소드는 false로 반환하고
이로써 저의 로그인 작업은 실패합니다
이 인터페이스 안의 마지막 메소드는
upgradeEncoding입니다
이것은 기본 메소드이며 언제나 false로 반환하는
기본 로직을 갖고 있습니다
이 메소드의 목적은 해커가
여러분의 비밀번호를 해킹하고 복호화하여
해시값의 일반 텍스트 비밀번호를 알아내는 것을
여러분이 아주 아주 어렵게 하고자 한다면
해커라이프를 정말 어렵게 만들고 싶다면
여러분의 비밀번호를 두 번 인코딩할 수 있습니다
즉 해싱을 한 번만 하는 대신
해싱을 두 번 하는 것입니다
간단히 말해 이 upgradeEncoding은
true값을 반환한다면
여러분의 비밀번호에 더 많은 보호를 제공합니다
기본적으로 이는 false인데
일반 텍스트 비밀번호를 기본 1회 해싱하는 것으로
충분해야 하기 때문입니다
PasswordEncoder 인터페이스의
구현 클래스들로 넘어가기 전에
PasswordEncoder 인터페이스가 저의 Spring Security
프레임워크 안에서 어떻게 보이는지 보여드리겠습니다
NoOpPasswordEncoder과 같이
아무 PasswordEncoder를 열어보면
이 모든 PasswordEncoder들은
PasswordEncoder 인터페이스를 구현합니다
이 PasswordEncoder인터페이스를 열어보면
가장 첫 번째 추상 메소드는
encodePassowrd입니다
이 메소드는 일반 텍스트 비밀번호
또는 rawPassword를 받아
여러분이 작성한 로직 또는
여러분이 사용하는
PasswordEncoder 구현체에 기반해
일반 텍스트 비밀번호의 해시값 또는 어떤 암호화된
값을 반환합니다
두 번째 추상 메소드는 matches입니다
보시다시피 두 개의 변수를 받습니다
하나는 rawPassword - 인코딩하고 매치할 가공되지 않은 비밀번호
이 rawPassowrd를 사용해
이 encode 메소드 안에 있는 동일한
인코딩 절차를 적용한다는 의미입니다
이 rawPassword의 해시 문자열을 받으면
비교할 겁니다
그리고 해시값이 일치한다면 true로 반환합니다
그렇지 않으면 단순히 false로 반환합니다
마지막 메소드는 기본 메소드입니다
그러니 기본적으로 false라는 걸 볼 수 있습니다
하지만 이 메소드가 true일 때 인코딩된 비밀번호는
더 높은 보안을 위해 다시 인코딩되어야 합니다
여기 메소드 주석에서도
확인할 수 있는 내용입니다
이로써 PasswordEncoder 인터페이스에 대해
아주 명확히 이해했을 거라 생각합니다
다음 강의에서는 이 PasswordEncoder
인터페이스를 위해 Spring Security 안에
존재하는 다양한 구현 클래스들이
무엇이 있는지 다루겠습니다
우리가 이들을 우리 웹 애플리케이션에
활용할 수 있도록 말입니다
감사드리며 다음 강의에서 뵙겠습니다 수고하셨습니다