PasswordEncoder

나무·2024년 5월 7일

스프링 시큐리티

목록 보기
5/8
post-thumbnail

0. PasswordEncoder 란?

우리가 웹사이트에 로그인 혹은 회원가입을 할 때 반드시 기입하는 정보 중 하나가 바로 "비밀번호" 이다. 문제는 이 비밀번호 데이터가 서버로 전송 될 때 아무런 암호화, 인코딩도 되지 않은 채로 평문으로 전송 될 경우 보안 측면에서 굉장히 취약점이 될 수 있다.

해킹 기법 중에 네트워크 상의 데이터 패킷을 몰래 훔쳐보는 공격 기법이 있는데 이를 sniffing 이라 부른다. 호시탐탐 사용자들의 개인정보를 노리는 해커들이 웹사이트로 흘러가는 데이터 패킷들을 sniffing 하여 데이터 정보를 까보는데 만일 비밀번호가 떡하니 그대로 적혀있으면 바로 개인 정보가 유출이 되는 셈이다.

그래서 이를 막기 위해 스프링 시큐리티에서는 비밀번호를 암호화 하는 기능을 제공하며 PasswordEncoder 라는 인터페이스가 이를 수행해준다.

1. PasswordEncoder : 인터페이스

  • 비밀번호를 안전하게 저장하기 위해 비밀번호의 단방향 변환을 수행하는 데 사용된다.

encode() : 비밀번호를 지정된 암호화 방식으로 인코딩 한다.
matches() : 원본 비번 vs 인코딩된 비번을 비교하여 일치하는지 검사한다. 이때 원본을 인코딩하여 검사를 진행한다.
upgradeEncodeing() : 인코딩된 비번이 보안상의 이유로 다시 인코딩되어야 할 경우 true, 그렇지 않을 경우 false 반환한다.

2. DelegatingPasswordEncoder : 구현체

접두사

{인코딩id} 형식의 접두사를 사용하여 비밀번호가 어떤 방식으로 인코딩되었는지 식별하는 클래스이다. (접두사 생략하면 기본으로 bcrypt 방식 적용)

ex) 1111 -> {bcrypt}#$@3223rf32g2223wwewddfr223@#$5ggsd@3gf
bcrypt 방식으로 인코딩 됨

위임

여러 방식의 인코더들을 보관하고 있으며 접두사의 id 값을 추출한 다음, 해당 id 로 적절한 인코더를 찾아서 위임해준다.

지원하는 인코딩 방식

본 포스트는
[스프링 시큐리티 완전 정복 6.x 개정판 를 보고 정리했습니다.

profile
🍀 개발을 통해 지속 가능한 미래를 만드는데 기여하고 싶습니다 🍀

0개의 댓글