inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

웹소켓/STOMP 채팅서비스(spring, vue, redis)

JWT토큰생성

섹션3. JWT토큰생성 부분에서 질문 있습니다.

해결된 질문

143

김태우

작성한 질문수 21

0

안녕하십니까 선생님 !
섹션3. JWT토큰생성 강의에서 작성하신 createToken 메서드를 보면 헤더를 따로 설정하지 않는데 JJWT 라이브러리가 SECRET_KEY를 참고하여 헤더를 설정해주는건지, 아니면 기본 설정 값이 들어가는 것인지 궁금합니다.

createToken 메서드 :

public String createToken(String email, String role){

Claims claims = Jwts.claims().setSubject(email);

claims.put("role", role);

Date now = new Date();

String token = Jwts.builder()

.setClaims(claims)

.setIssuedAt(now)

.setExpiration(new Date(now.getTime()+expiration*60*1000L))

.signWith(SECRET_KEY)

.compact();

return token;

}

spring-boot websocket stomp-websocket pubsub vue-3

답변 2

1

bradkim

안녕하세요. 제가 질문의 의도를 정확히 이해하지 못했는데 헤더라는게 http헤더를 말씀하시는걸까요? 토큰은 만들때헤더로 응답주지 않고 body로 응답을 줍니다~!

0

김태우

jwt 세가지 구성 요소 헤더, 페이로드, 시그니처 중 헤더입니다 !
createToken 메서드에서 헤더 부분에 대한 설정 (서명에 사용된 해시 알고리즘, 토큰 타입)은 따로 없어서 궁금했습니다.

AI 인턴의 설명처럼 signWith 메서드에 넣은 SECRET_KEY를 보고 알아서 설정해주는건지 궁금합니다.

1

bradkim

아 jwt토큰 헤더를 물어 보시거군요.

this.SECRET_KEY = new SecretKeySpec(java.util.Base64.getDecoder().decode(secretKey), SignatureAlgorithm.HS512.getJcaName());

 

위 코드를 보면 HS512를 쓰겠다라는 부분 설정이 들어가잖아요. 이 HS512가 SHA512알고리즘을 의미하는 겁니다. 이 key를 가지고 token을 생성하기에, jwt토큰 라이브러리에서 header를 위 정보를 참고하여 암호알고리즘과 같은 적절하게 설정하게 됩니다.

1

김태우

jwt 라이브러리에서 헤더를 설정해줘서 제가 따로 설정해주지 않아도 되는 것이군요 .. 늦은 시간까지 친절하게 답변 해주셔서 감사합니다 :)

0

인프런 AI 인턴

안녕하세요, 인프런 AI 인턴입니다. 김태우님.

JJWT 라이브러리에서의 JWT 토큰 생성 과정에서 createToken 메서드를 보면, 헤더를 직접 설정하지 않는 이유에 대해 질문해 주셨네요.

  1. 헤더 설정:

    • JJWT 라이브러리를 사용하면, 토큰 생성 시 기본 헤더가 자동으로 설정됩니다. JWT의 표준 헤더는 일반적으로 두 가지 필드를 포함합니다: alg(알고리즘)와 typ(유형). alg는 서명에 사용한 알고리즘을 나타내고, typ는 토큰의 유형(JWT)을 나타냅니다.
    • signWith 메서드를 통해 서명 알고리즘과 SECRET_KEY를 지정하게 되면, 해당 알고리즘(예: HS512)에 따라 alg 필드는 자동으로 설정됩니다. 즉, 서명 과정을 통해 헤더가 적절히 구성됩니다.
  2. 기본 설정:

    • JJWT는 최소한의 설정만으로도 JWT 토큰을 생성하도록 설계되어 있습니다. 따라서 특수한 요구가 없다면, 헤더의 기본 설정만으로 충분한 경우가 많습니다.
  3. 커스텀 헤더:

    • 필요시 header 메서드를 사용하여 커스텀 헤더를 추가할 수도 있습니다. 하지만 일반적인 경우에는 라이브러리가 제공하는 기본 설정만으로 충분합니다.

이와 관련된 더 자세한 정보는 아래의 기존 질문에서 확인하실 수 있습니다:

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

ERD 질문

0

54

2

StompHandler 관한 질문

0

80

2

리프레시 토큰은 알아서 구현하면 되는건가요??

0

79

2

cors, csrf 직접 구현

0

65

1

JWT 필터구현

0

98

2

강의 잘듣고 있습니다. 혹시 다음 강의 계획은 없으신가요?

0

57

1

STOMP 동작 과정 질문

0

48

1

chain.doFilter()

0

45

1

자바 21로 소스 작성해도 되나요?

0

60

2

메시지 브로커 선택에 관한 질문

0

65

2

WebSocket과 Spring Security 질문

0

81

2

추가 커스텀 구현 질문 있습니다.

0

60

2

connect와 동시에 구독하는데 구독 검증이 꼭 필요한가요?

0

97

2

저도 동일한 질문인데

0

78

3

token이 필요한 엔드포인트에 의도적으로 토큰 누락시 대처

0

67

2

수업자료가 왜 다 나눠져있나요?

0

78

2

메시지 전송 시 검증

0

61

2

JWT 생성 시 subject 설정에 대한 질문

0

157

3

StompHandler 질문 있습니다.

0

82

2

앱 서비스일 경우

0

83

2

웹소켓 서버 재배포시 고려해야 할 상황 질문

0

107

2

배포 오류 질문

0

123

2

/connect 경로에 대한 토큰 검증의 필요성

0

77

1

JwtTokenProvider 작성중 오류 발생으로 문의드립니다.

0

96

2