인프런 영문 브랜드 로고
인프런 영문 브랜드 로고

Inflearn Community Q&A

yannishin's profile image
yannishin

asked

Spring Security

UserDetailsService, PasswordEndoder 재 정의

Resolved

Written on

·

165

0

강의를 수강하면서 기존 시스템에 JWT와 Spring Security 를 적용하고 있습니다.

1)비밀 번호가 없을경우 Password Encoder

  -  기존 암호화  알고리즘을 변경 할수 없어 PasswordEncoder를 구현한 커스텀 PasswordEncoder로 해결은 하였는데 생체 인증의 경우 비빌번호를 생체정보가 대신하기 떄문에 비밀 번호업이 인증을 해야 하는데   PasswordEncoder 없이 인증을 진행 할 수 있는 방법이 있을까요?

 2. UserDetailService를 구현시 loadUserByUsername 을 구현해야 하는것으로 알고 있는데 인자가 사용자 정보를 가져 오기 위한 유니크한 키(로그인 게정등등) 인에 현재 시스템은  로그인 게정만 가지고는 사용자의 정보를 조화 할수 없는데  loadUserByUsername을 구현하지 않고 UserDetails(User를 상속한 CustomUserDetail) 객체를 리턴 할 수 있는 방업이 있을까요.


 

Spring Securityjavaspring-boot

Answer 1

0

leaven님의 프로필 이미지
leaven
Instructor

1번에 대한 질문은 정확하게 답변드리기가 어렵네요

어떻게 보면 비밀번호 없이 인증을 진행하는 것이 어렵지 않습니다.

AuthenticationProvider 에서 인증 처리를 할 때 비밀번호 인증하는 로직을 구현하지 않으면 그만입니다.

상식적으로 그렇게 되면 말이 안되지만 비밀번호를 검증하지 않아도 다른 대안이 있는 경우는 스프링 시큐리티가  특정한 무엇을 강제하지는 않습니다.

 

2번도 1번과 비슷한 맥락인 것 같습니다.

UserDetailsService 를 굳이 사용하지 않으셔도 됩니다.

AuthenticationProvider 를 커스텀하게 만들고 임의의 UserService 를 호출한 다음 그 안에서 자유롭게 사용자의 정보를 조회하는 로직을 작성하신 다음에 UserDetails 타입으로 리턴하시면 됩니다.

스프링 시큐리티에서 제공하는 각 클래스들은 기본적인 인증과 인가로서의 활용을 하기 위해 존재하는 것이지 그것을 강제하지는 않습니다.

다만 스프링 시큐리티의 인증 및 인가흐름을 벗어나지만 않으면 됩니다.

 

질문하신 내용이 저도 조금 막연한 부분이 있어서 구체적으로 설명드리기가 어렵네요;;

혹시 소스 공유가 가능하면 제가 실제로 파악 후 도움이 답변을 드릴 수 있을 것 같습니다.

yannishin's profile image
yannishin

asked

Ask a question