채널톡 아이콘

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

sw님의 프로필 이미지

작성한 질문수 3

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

JWT토큰검증

jwt 인증, 검증 질문입니다.

작성

·

80

0

안녕하세요. jwt 11 버전 설명해주시면서 생성과 검증에 대한 궁금증이 생기는데요.

생성을 위해서는 base64로 인코딩 된 값을 디코더 하신 뒤 SecretKeySpec을 이용한 뒤 HS512로 암호화 하셨는데요.

검증 부분에서는 base64로 인코딩 된 값(디코더와 SecretKeySpec가 이루어지지 않은 채로)으로 토큰 검증 및 claims를 추출하는데 이 부분에서 문제가 없는 걸까요?

 

답변 2

0

bradkim님의 프로필 이미지
bradkim
지식공유자

안녕하세요!! jwt토큰 관련 라이브러리에는 많은 부분이 내부적으로 자동구현이 이뤄져있습니다.
base64로 인코딩된 부분은 언제든 디코딩이 가능하고, 라이브러리 내부적으로 디코딩을 수행한 후에 jwt토큰 내용값을 이용하여 검증을 수행합니다.

 

또한, HS512로 암호화한것은 최초에 signature부분을 만들려면 반드시 해줘야 하는 작업입니다. 이는 인코딩이 아니라 암호화입니다.

 

인코딩과 다르게 암호화한것은 디코딩이 불가능하죠. 나중에 검증 부분에서는 이를 사용자가 넣어오는 signature부분과 비교대조하여 검증합니다. 이 또한 상당부분 자동화가 돼 있어서, 가시적으로 보기는 어렵다고 보시면 되겠습니다.

 

 

0

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

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

JWT(JASON Web Token)의 생성과 검증 과정에서 사용되는 기법에 대해 질문해 주셨네요.

  1. JWT 생성 시:

    • JWT는 일반적으로 헤더, 페이로드, 사인을 포함하여 세 부분으로 구성되며, 각각은 Base64Url로 인코딩 됩니다.
    • 생성 시 SecretKeySpec을 통해 해싱 알고리즘(예: HS512)을 이용해 서명(digital signature)이 생성됩니다.
  2. JWT 검증 시:

    • 클라이언트로부터 받은 토큰은 먼저 Base64Url로 디코딩되어 각 부분(헤더, 페이로드, 서명)을 분리합니다.
    • 서명 검증을 위해 서버가 가지고 있는 SecretKeySpec을 사용하여 서명을 재계산하고, 받은 토큰의 서명과 비교합니다.
    • 여기서 중요한 점은 SecretKeySpec과 디코딩 과정이 검증에서 직접적으로 다루어지지 않더라도, 서명에 이상이 없다면 성공적인 검증이 이루어졌다고 판단할 수 있습니다.

스프링 환경에서 JWT를 사용할 때 가장 중요한 것은 올바르게 셋업된 키 및 알고리즘을 사용하는 것이며, 검증 로직에서도 정확한 서명 비교가 이루어져야 합니다.

이와 관련하여 문제를 해결하거나 추가적인 이해를 돕기 위한 기존의 답변 및 관련 링크는 아래에서 확인할 수 있습니다:

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