• 카테고리

    질문 & 답변
  • 세부 분야

    백엔드

  • 해결 여부

    미해결

BadCredentialsException으로 인한 Unauthorized 에러

21.05.08 02:31 작성 조회수 918

2

안녕하세요, 최근 강좌를 다 듣고, 프로젝트에서 응용하여 적용하던 중 하루내내 디버깅을 시도했음에도 풀리지 않는 문제가 생겨 질문 남기게 되었습니다

Mysql에 저장된 user 객체(email, password, name, phoneNumber, authorities 등)에 대하여 loginDto(email, password)로 로그인을 하는 API를 들었습니다. 하지만 포스트맨으로 테스트한 결과 다음과 같은 결과가 지속됨을 알 수 있었습니다. (강의에서 설명하신 코드를 거의 대부분 가져와 적용하였습니다)

STS에서 디버깅해보았을 때, JwtFilter를 지나 해당 Controller의 Request URI로 도착했고,  아래와 같이 authenticationToken을 생성하였습니다.

이후 authenticate 메소드가 실행되면서 CustomUserDetailsService로 넘어가고 createUser 메소드에서 GrantedAuthority를 리스트에 담아 grantedAuthorities에 저장하였습니다. 다음과 같이 전체 정보를 잘 가지고 오는 것을 알 수 있습니다. 

그러나, 그후 다음의 포인트에서 더 이상 넘어가지 못하면서 마지막으로 source not found에 도달하고, api는 자격 증명에 실패했다는 에러메시지를 반환합니다. 강의를 3번 넘게 돌려보면서 빠뜨린 부분은 없는 것인지 찾아봤는데 잘 모르겠스빈다ㅠㅠ 도와주시면 감사하겠습니다.

답변 2

·

답변을 작성해보세요.

2

안녕하세요 wkdalsgh192님!

저도 디버깅을 해보는 것이 빠를 것 같아서 해당 코드의 Repo를 공유해주시거나 코드를 묶어서 보내주시면 도움을 최대한 드려볼 수 있도록 노력하겠습니다 :)

https://github.com/wkdalsgh192/jwt-practice

해당 레포지토리에 관련 코드를 올려놓았습니다!

0

코드를 잠깐 읽어보니 기존에 회원 관련 로직이 있으셨던것 같은데요.

( SHA256으로 패스워드를 인코딩하는 로직들도 있고요 )

이 부분들을 JWT 강의의 내용으로 바꾸는 중이셨던 것으로 보이는데 맞나요?

바꾸는 중에 기존 데이터와 신규 로직간의 충돌이 있을수도 있을 것 같고요.

로직상으로는 문제가 없는 것 같습니다.

올려주신 코드로 제 테스트용 DB에 연결해서 authority 테이블에 권한 insert 한후에 회원가입 후 로그인 해보니 문제 없네요.

허걱 답변 달아주셔서 감사합니다! 

말씀하신 것처럼 이미 생성된 객체에 배운 내용을 추가하면서 리팩토링을 하다보니 중간에 꼬인것같습니다.

진행하신 절차대로 해보니 문제없이 잘 되네요!!! (아직 왜 이틀동안 안 되었던건지 명확한 이유는 알 수 없지만, BadCredentials 에러가 떴고, SaltSHA256.class를 지운 뒤에 해당 순서대로 진행하여 된 걸로 봐서 암호화하는데 문제가 있었던것같습니다..)

직접 봐주셔서 감사드려요ㅠㅠ

아 혹시 한 가지만 더 여쭤보고 싶습니다. 회원 조회할 때 강의에서는 username과 같은 유저 정보를 파라미터로 사용하시는데 실무에서도 그런가요? 아니면 User 객체를 들고다니다가 PK로 설정된 해당 객체의 id값을  사용하나요?

여기서 username 은 User ID, Email 과 비슷한 개념으로 사용한 것입니다.

실무에서는 email, userId 와 같은 것들이 사용될 것으로 생각됩니다. 

유저 정보들이 파라미터로 노출되는 일은 최대한 줄이는 것이 좋을 것 같습니다.

넵 알겠습니다!! 좋은 답변 감사합니다ㅎㅎㅎ 다음 강의도 기대하겠습니다~