작성
·
5.9K
1
1) 해당 사이트에서
secret 을 먼저 설정해주고
복붙하면 invalid 하다고 뜹니다.
스택 오버플로우를 참고해서 순서를 알았는데
안되서 순서를 바꿔서 해봐도 잘 되지 않습니다. (base64 encoded 등등 순서 바꾸고 여러시도를 해봄)
코드와 dependency는 동일하고 secret 만 secret 으로 바꿨습니다.
2) 뒤에서 강의에서 api gateway 에서 AuthorizationHeaderFilter 에서 검증과정은 무사히 통과 합니다.
제가 놓친게 있을까요?
답변 1
1
안녕하세요, 이도원입니다.
올려주신 이미지에 포함된 토큰 값이 잘못된게 아닌가 싶습니다. 아래 화면처럼 입력해 보면 저희쪽에서도 오류가 발생하네요. 설정하신 HEADER, PAYLOAD, SECRET 값 등은 정상 토큰을 사용하실 경우 오류없이 작동되는 것 같습니다. 사용하신 토큰을 공유해 주시면 다시한번 테스트 해 보겠습니다.
아래 토큰은 정상적으로 작동될 때이 토큰값이니 이것을 Encoded에 적용해서 테스트 해 보시기 바랍니다.
eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.MgOsygXloaQRJC2_clPpgLNr85uitvTUetbwWYweMmk
감사합니다.
답변 감사합니다.
eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiI2OTljYmM0OC04NWFhLTRmOWYtYjhjNi1lYzBlMTk5MjBjNWEiLCJleHAiOjE2NjY4NDUxNDJ9.l55XSqdxYtpDmHXsrBspYaNi_cabf-WXHo10-XHHFRQ
이것이 제토큰입니다. (방금 로그인해서 얻어온 토큰 결과입니다. )
String token = Jwts.builder() .setSubject(userDetails.getUserId()) .setExpiration(new Date(System.currentTimeMillis() + Long.parseLong(env.getProperty("token.expiration_time")))) .signWith(SignatureAlgorithm.HS256, env.getProperty("token.secret")) .compact();
제가 복붙한것은 postman 에서 로그인 요청시 받아온 header에 들어간 토큰 값입니다.
1)jwt.io에서 우측하단의 secret 값을 token.secert의 값으로 변경후 왼쪽 encoded에 나오는 토큰 값이랑
2) 제가 postman에서 로그인 성공해서 가져온 token 값이랑 같거나 아니면 적어도 valid해야 한거 아닌가요?
1,2 이 서로 다른 결과를 내는 이유가 궁금합니다.
시나리오
1) postman에서 로그인 성공해서 받아온 token 값 encoded에 복붙
2) decoded에 정보가 뜨고 secret이 다름으로 invalid signature 발생
3) decoded 에 secret을 나의 token.secret 으로 바꿔줌 -> encoded 변경 발생 -> valid signature 발생
4) 다시 나의 postman token을 encoded에 복붙시 invalid signature 발생
왜 3번 과정에서 생긴 token은 valid하고 과 제 postman login 성공 token은 invalid 한지 궁금합니다....
해당 토큰으로 서비스는 잘 돌아갑니다. (localhost:8000/user-service/health_check) 시 401안뜨고 잘통과합니다.