본문 바로가기

패스트캠퍼스/100% 환급 챌린지_2

패스트캠퍼스 환급챌린지 12일차 : Netplix 구독형 멤버십 프로젝트로 배우는 Spring Security 강의 후기

본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성하였습니다.

https://abit.ly/lisbva

 

 

안녕하세요 :)

오늘은 챌린지 12일차로, 비가 주륵주륵 내리는 하루로 빨리 공부를 끝내고 이불콕 해야겠어요.

 

오늘 배울 내용은,

Part A. 로그인, 로그아웃, 회원가입으로 배워보는 스프링 시큐리티 기초

Ch 4. PasswordEncoder 와 암호 처리

"01. PasswordEncoder 살펴보기" 입니다.


 

오늘은 PasswordEncoder 의 전반적인 내용을 배웠다. 현재까지의 비밀번호는 예시의 간단함을 위해 평문으로 처리했었지만 보통은 암호화를 한다. 이를 위해서는 스프링 시큐리티의 PasswordEncoder 를 활용해야 한다.

PasswordEncoder 인터페이스를 통해 스프링 시큐리티에서 사용자 암호를 검증하는 방법을 알 수 있다. 인증 프로세스에서 암호가 유효한지 확인하는 과정을 거치고, 암호에 대한 인코딩을 수행할 수 있다. 인터페이스에는 두 개의 메소드와 하나의 default 메소드가 정의되어 있다.

encode(CharSequence rawPassword)는 주어진 암호의 해시를 제공하고, 암호화를 수행한다.

matches(CharSequence rawPassword, String encodedPassword)는 인코딩된 문자열이 원시 암호와 일치하는지 검증한다.

upgradeEncoding(CharSequence encodedPassword)는 기본적으로 false 를 반환하고, true를 반환하도록 메소드를 재정의하면 보안 향상을 위해 인코딩된 암호를 다시 인코딩 한다.

PasswordEncoder 구현체 만드는 방법에 대해서 알아보면,
matches()와 encode()는 서로가 결합이 되어 있기 때문에 두 메소드의 구현체는 기능상 서로 맞아야 하고, encode() 에서 반환된 인코딩 문자열은 matches()에서 검증이 가능해야 한다. 가장 간단한 구현체로는 예시에서 많이 봤던 NoOpPasswordEncoder 가 있다. 암호를 인코딩하지 않고 평문 그대로 사용한다.

SHA-512 해싱 알고리즘을 사용하는 PasswordEncoder 를 구현해보면,
먼저 matches() 에서는 문자열 비교로 검증하고, encode() 에서는 hashWithSHA512() 메소드를 호출한 뒤, hashWithSHA512() 에서는 SHA-512 해싱 알고리즘을 기반으로 문자열을 변환한다. 그리고 만약 MessageDigest 에 잘못된 알고리즘이 입력되면 예외가 던져진다.

 

참고로,

기존 스프링 시큐리티 자체적으로 제공하는 PasswordEncoder 의 구현체의 종류는 다음과 같다.
- NoOpPasswordEncoder
- StandardPasswordEncoder
- Pbkdf2PasswordEncoder
- BCryptPasswordEncoder
- SCryptPasswordEncoder