인프런 커뮤니티 질문&답변

작성자 없음

작성자 정보가 삭제된 글입니다.

스프링 시큐리티 OAuth2

OAuth 2.0 Social Login 연동 구현 (6)

OAuth2 form login error

24.09.15 16:06 작성

·

39

·

수정됨

0

OAuth 2.0 Social Login 연동 구현 (6) 부분에 있는 영상 33:46까지 따라왔지만 form로그인에서 발생한 문제입니다.

 

  1. form login의 inmemory나 jdbc형태로 하는 게 아닌 CustomUserDetailsService를 통해서만 인증을 하는 것으로 보이는데, 이와 같은 에러가 발생하는 이유를 모르겠습니다. (에러코드가 조회되지 않음)

     

디버그 모드를 확인해보니,

DaoAuthenticationProvider클래스에 있는 additionalAuthenticationChecks메소드에서 에러가 발생하고 있습니다.


if (!this.passwordEncoder.matches(presentedPassword, userDetails.getPassword())) { this.logger.debug("Failed to authenticate since password does not match stored value"); throw new BadCredentialsException(this.messages .getMessage("AbstractUserDetailsAuthenticationProvider.badCredentials", "Bad credentials")); }

 

2. presentedPassword 이부분이 값이 빈값으로 넣어지고 있는데 문제가 되는 부분인 것 같아 질문드립니다.

2-1. 추가적으로 이부분은 첫 로그인이라서 에러나는 부분하고 상관이 없이 발생하는지 질문드립니다.

 

에러로그가 확인이 불가능하여, 코드 공유를 위해 프로젝트 공유를 하였습니다. 확인 부탁드립니다.

답변 2

0

JUNI님의 프로필 이미지

2024. 09. 15. 16:50

image.png

추가적으로 authentication에 값이 credentials가 빈값으로 오며,
String presentedPassword = authentication.getCredentials().toString();
해당코드를 통해 값이 빈값이라서 값이 없는 상황입니다.

presentedPassword = ""
userDetails.getPassword() = "{noop}1234"

입니다.

image.png

0

인프런 AI 인턴님의 프로필 이미지

2024. 09. 15. 16:11

안녕하세요, 인프런 AI 인턴입니다.

JUNI님이 OAuth 2.0 로그인 연동 시 발생하는 문제에 대해 궁금해하시는 점 이해했습니다. 올려주신 문제 상황을 기반으로 분석한 결과, 인증 과정에서 presentedPassword가 빈 값으로 설정되어 BadCredentialsException이 발생하는 문제를 언급하셨습니다.

이와 관련해 유사한 문제를 경험하신 다른 학습자의 질문과 답변을 찾아보았습니다. 여기를 참고하시면 문제 해결에 도움이 될 것 같습니다:

유사한 질문 및 답변

  • 실전 프로젝트 - 시크릿 키 관련 오류 질문입니다.
    이 게시물에서는 CustomAuthenticationProvider를 구현할 때 발생하는 문제와 DaoAuthenticationProvider로 인해 발생하는 인증 문제에 대응하는 방법을 다룹니다. 현재 설정과 맞지 않는 parentAuthenticationManager 문제를 해결하는 방법을 참고할 수 있습니다.

  • Error , exception이 잘 안됩니다.
    이 질문에서는 로그인 에러가 발생할 경우 에러 문구가 표시되지 않는 문제와 관련된 해결 방법을 다룹니다. 주로 로그인 실패 핸들러의 구현과 설정을 확인하는 방법이 자세히 설명되어 있습니다.

문제 해결 방안 요약

  1. CustomUserDetailsServiceDaoAuthenticationProvider 설정을 재확인하세요. presentedPassword 값이 올바르게 전달되고 있는지 점검해야 합니다.
  2. passwordEncoder.matches() 호출 시 비밀번호가 올바르게 인코딩되고 있는지 확인하세요. 인코더가 제대로 설정되지 않으면 인증이 실패할 수 있습니다.
  3. 디버그 모드를 통해 additionalAuthenticationChecks에서 실제로 presentedPassworduserDetails.getPassword() 값이 어떻게 설정되고 있는지 확인하세요.

위의 리소스를 참고하여 설정을 조정해 보시기 바랍니다. 더불어 문제가 되는 설정이 있다면 구체적으로 추가 정보를 제공해 주시면, 추가적인 도움을 제공드릴 수 있습니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

작성자 없음

작성자 정보가 삭제된 글입니다.

질문하기