[Go] JWT token decode

2022. 9. 21. 00:48· Language/Go

Go에서 JWT token 생성, 검증 등 을 사용할 때,
여러 라이브러리가 있는데 그 중 이것을 추천한다.
https://github.com/dgrijalva/jwt-go

GitHub - dgrijalva/jwt-go: ARCHIVE - Golang implementation of JSON Web Tokens (JWT). This project is now maintained at:

ARCHIVE - Golang implementation of JSON Web Tokens (JWT). This project is now maintained at: - GitHub - dgrijalva/jwt-go: ARCHIVE - Golang implementation of JSON Web Tokens (JWT). This project is n...

github.com

사용하기도 편하고, 찾으면 자료도 많아서 편하기 때문이다.


그런데...
오래전부터 이 라이브러리를 사용했었는데 README 가 업데이트되었고,

THIS REPOSITORY IS NO LONGER MAINTANED

The new repository can be found at: https://github.com/golang-jwt/jwt
For more information, see issue #462.
이렇게 나와있네..
살펴보니 사용했던 함수들은 거의 똑같고 추가되는 것들이 있는 것 같다.

https://github.com/golang-jwt/jwt

GitHub - golang-jwt/jwt: Community maintained clone of https://github.com/dgrijalva/jwt-go

Community maintained clone of https://github.com/dgrijalva/jwt-go - GitHub - golang-jwt/jwt: Community maintained clone of https://github.com/dgrijalva/jwt-go

github.com


이걸 사용하자!

Decode 하는 방법을 살펴보자.
JWT token을 decode 해서 안에 있는 정보(Payload) 들을 알 수 있다.
담는 정보의 한 파트를 클레임(claim)이라고 부르고, key , value의 한 쌍으로 이뤄져 있다.
token에는 여러 개의 claim을 넣을 수 있다.

claim은 registered, public, private 종류가 있는데
각 종류의 의미 및 claim의 종류는 다음 글에서 소개하고 이 글에서는 claim을 Go로 얻는 방법을 소개하려고 한다.

1) install & import

go get -u github.com/golang-jwt/jwt/v4
import "github.com/golang-jwt/jwt/v4"


2) header의 Authorization을 가져와야 한다.
(참고로 Gin framework를 사용했기 때문에 *gin.Context를 이용한다.
Gin을 사용하지 않으면 golang get header Authorization을 검색하면 나올 것이다.)

// c *gin.Context
jwtToken := c.GetHeader("Authorization") // type string

header의 Authorization 안에 있는 jwtToken을 받아 올 수 있다.
예를 들면 이런 식이다.

JWT eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ0b2tlbl90eXBlIjoiYWNjZXNzIiwiZXhwIjoxNjYzNjg5MTY1LCJqdGkiOiJkZjUyZTE1MGY0YmM0MWRiYTk0OTYyMjgyMzA0MjM0ZiIsInVzZXJuYW1lIjoiamlhbjE5OTBAcHVkZGxyLmNvbSJ9.vbaSMwr-wPn3hOQzcqDu12l3pN0uFcHwOKBfp8aB1mc

Bearer 가 될 수 도 있고, JWT 가 될 수 도 있는데 보통 Bearer를 많이 쓰긴 하지만 JWT 도 사용을 한다.
이건 프로젝트에서 팀원들끼리 정하면 된다. 서버 쪽에서 토큰을 생성할 때 넣어주기 때문..

func JwtDecode(jwtToken string) {
	token := strings.Split(jwtToken, " ") // [JWT, eyJ0eXAiOuFcHwOKBfp8aB1mc]
	if len(token) != 2 {
		return
	}
	
	claims := jwt.MapClaims{}	// type MapClaims map[string]interface{}
	_, err := jwt.ParseWithClaims(
    	token[1], claims, func(token *jwt.Token) (interface{}, error) {
		return []byte("YOUR_JWT_SECRET_KEY")), nil
	})
    
	// err 처리
    
	for key, val := range claims {
		fmt.Println(key, val)
	}
	
}

Decode 함수는 이런 식으로 구현할 수 있는데
claims의 type 이 map [string] interface {}로
for loop로 key value를 찾을 수 있다.
이렇게 원하는 claim 찾을 수 있다.

'Language > Go' 카테고리의 다른 글

[Go] Convert byte slice to image (io.Reader)  (0) 2022.09.29
[Go] Convert image.NRGBA to byte slice  (0) 2022.09.28
[Go] Contains method for a slice (go version 1.18)  (0) 2022.09.16
[Go] filetype (MIME type)  (0) 2022.09.16
[Go] get image width height (image: unknown format)  (0) 2022.09.15
'Language/Go' 카테고리의 다른 글
  • [Go] Convert byte slice to image (io.Reader)
  • [Go] Convert image.NRGBA to byte slice
  • [Go] Contains method for a slice (go version 1.18)
  • [Go] filetype (MIME type)
임쟌
임쟌
임쟌
Jian's Blog
임쟌
전체
오늘
어제

공지사항

  • [자기소개]
  • 쟌's Blog (227)
    • Language (32)
      • Python (8)
      • Go (24)
      • Java (0)
    • Framework (10)
      • Django (9)
      • Gin (1)
      • Spring boot (0)
      • Fiber (0)
    • Database (10)
      • PostgreSQL (8)
      • MySQL (0)
      • Redis (2)
    • Server (51)
      • Linux (16)
      • Git (12)
      • Oracle Cloud Infrastructure (13)
      • Mac (4)
      • Docker (4)
      • RabbitMQ (0)
      • ETC (2)
    • Operating System (0)
      • OS (0)
    • Algorithm (22)
      • Go (22)
      • Python (0)
    • Exam Certification (4)
    • Daily Life (27)
      • Review (21)
      • Diary (6)
    • 이공계전문기술연수 (71)
      • Java (17)
      • Database (8)
      • HTML | CSS (13)
      • JavaScript | jQuery (6)
      • Servlet | JSP (16)
      • Spring Framework (11)

인기 글

최근 댓글

최근 글

hELLO · Designed By 정상우.v4.2.2
임쟌
[Go] JWT token decode
상단으로

티스토리툴바

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.