在 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 於後端的實作。