본문 바로가기
TIL

내일배움캠프 7주차 Spring Password Encoder, @Authenticationprincipal

by 율량동박씨 2024. 5. 31.

오늘의 키워드

  • Password Encoder
  • @Authenticationprincipal

오늘의 내용

  • Password Encoder
    • 비밀번호의 안전한 저장을 위해 단방향 암호화를 지원하는 인터페이스와 구현체를 제공하는 기능
    • 구현 클래스의 종류
      • BcryptPasswordEncoder : BCrypt 해시 함수를 사용해 비밀번호를 암호화한다
        • Bruteforce attack이나 Rainbow table attack과 같은 Password Cracking에 대한 저항력을 높이기 위해 의도적으로 느리게 설정되어 있다
        • BCryptPasswordEncoder의 속도는 강도(strength)를 조정해서 조절할 수 있습니다. 강도는 4 ~ 31까지 설정할 수 있으며, BcryptPasswordEncoder는 default 강도로 아래와 같이 10을 사용한다.
      • Argon2PasswordEncoder : Argon2 해시 함수를 사용해 비밀번호를 암호화한다
        • Password Cracking을 방지하기 위해 다른 PasswordEncoder와 마찬가지로 의도적으로 느리게 실행되도록 설정되어 있다
        • 1개의 비밀번호를 확인하는데 약 1초가 걸리도록 속도를 조정해줘야 한다
      • Pbkdf2PasswordEncoder : PBKDF2 해시 함수를 사용해 비밀번호를 암호화한다
        • FIPS 인증(Federal Information Processing Standards, 미 연방 시스템 내에서 중요한 데이터를 보호하기 위한 필수 표준) 이 필요한 경우 선택을 많이 한다
      • SCryptPasswordEncoder : SCrypt 해시 함수를 사용해 비밀번호를 암호화한다
    • 이 외에 다른 클래스들이 많이 있으나 안전하지 않은 것으로 간주되어 더 이상 사용되지 않는다. 하지만 기존 레거시 시스템을 마이그레이션 하기 어렵기 때문에 제거는 되지 않았다
  • @Authenticationprincipal
    • 인증 후 로그인 객체를 가져오는 방법 중 하나이다
    • SecurityContextHolder에 비해 반복되는 코드가 줄어들고 커스텀 로그인 객체를 가져올 수 있기 때문에 기능적 활용도가 높아질 수 있다

오늘의 회고

  • 프로젝트를 진행하면서 회원가입과 로그인을 구현하는데 조건에 비밀번호를 암호화, 복호화하지 말라는 조건이 있어 스프링 시큐리티를 사용하지 않는 방법을 찾아 열심히 했는데 시큐리티를 사용해야 한다는 공지가 올라와서 다급하게 시큐리티 기능을 추가했는데 회원가입, 로그인, 등록까지는 되는데 수정과 삭제가 작동하지 않는다.😱😱😱 😱 살려줘...... 😱 😱 😱 😱 😱 😱