iT邦幫忙

2019 iT 邦幫忙鐵人賽

DAY 24
0
Modern Web

遺留系統重構 - 從 MEAN Stack 轉移到 go-vue-postgresql系列 第 24

Day 24 : JWT - 在 Golang 中使用 JSON Web Token

  • 分享至 

  • xImage
  •  

在 Golang 中使用 JSON Web Token,透過套件 jwt

package main

import (
	"fmt"
	"strings"
	"time"

	"github.com/robbert229/jwt"
)

var secret = "SecretCode"

func generatorJWT(userName string) (token string) {
	algorithm := jwt.HmacSha256(secret)

	claims := jwt.NewClaim()
	claims.Set("Role", userName)
	claims.SetTime("exp", time.Now().Add(time.Minute))

	token, err := algorithm.Encode(claims)
	if err != nil {
		panic(err)
	}

	return token
}

func validateJWT(token string) (status bool) {
	algorithm := jwt.HmacSha256(secret)
	validate := algorithm.Validate(token)
	if validate != nil {
		panic(validate)
	}

	loadedClaims, err := algorithm.Decode(token)
	if err != nil {
		panic(err)
	}

	role, err := loadedClaims.Get("Role")
	if err != nil {
		panic(err)
	}

	roleString, ok := role.(string)
	if !ok {
		panic(err)
	}

	status = strings.Compare(roleString, "Admin") == 0

	return status
}

func main() {
	token := generatorJWT("Admin")
	fmt.Printf("Token: %s\n", token)

	status := validateJWT(token)
	if status {
		fmt.Println("User is an admin")
	}
}

generatorJWT 中使用 jwt.HmacSha256 產生演算法實體,
jwt.NewClaim 產生資料容器,設置相關的參數,
algorithm.Encode 進行編碼。

validateJWT 中透過 algorithm.Validate 進行驗證,
algorithm.Decode 解析資料容器,再取回內部資訊,進行其他邏輯。

於是簡單地實作 JWT 於後端的實作。


上一篇
Day 23 : gRPC - 初見 gRPC
下一篇
Day 25 : 續 gRPC : 雙向串流
系列文
遺留系統重構 - 從 MEAN Stack 轉移到 go-vue-postgresql30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言