iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 22
0

本文同步發表於: Sponge Records

本文將介紹如何用 golang 實作 jwt 的產生與驗證,來達到網站與 api 驗證的功能

jwt 的產生

上一回我們有提到 jwt 分為 Header 、Payload 、Signature 這三個部分,而我們可以透過 jwt-go 這個 golang 的套件來使用 jwt

package models

//引用 jwt-go 這個套件
import (
    "github.com/dgrijalva/jwt-go"
)

//宣告JWT 結構
type Token struct {
	UserId uint
	jwt.StandardClaims
}

//準備聲明內容
tk := &Token{UserId: account.ID} 

//宣告使用 HS256 與加入Payload 的聲明內容
token := jwt.NewWithClaims(jwt.GetSigningMethod("HS256"), tk) //宣告使用 HS256 與加入Payload 的聲明內容

//將 token_pwd 設定為 secret 並產生 jwt
tokenString, _ := token.SignedString([]byte(os.Getenv("token_pwd")))

//將產生好的 jwt 值給予 account.Token
account.Token = tokenString

透過以上方式即可產生 jwt

驗證 jwt

通過 jwt-go 解析 jwt 就可達到用 jwt 驗證的效果

package models

//引用 jwt-go 這個套件
import (
   jwt "github.com/dgrijalva/jwt-go"
)

func parseToken(token string) (*jwt.StandardClaims, error) { 
    jwtToken, err := jwt.ParseWithClaims(token, &jwt.StandardClaims{}, func(token *jwt.Token) (i interface{}, e error) {
         return []byte(config.Secret), nil 
         }) 
    if err == nil && jwtToken != nil { 
     if claim, ok := jwtToken.Claims.(*jwt.StandardClaims); ok && jwtToken.Valid { return claim, nil } 
    } 
    return nil, err 
}

參考資料

  1. Gin(十二):配合JWT

下回預告

下回將會實作會員帳號修改的功能,讓會員可以改自己的密碼,增加安全性


上一篇
[Day21] 解析 jwt (一)
下一篇
[Day23] 會員帳號修改
系列文
Golang - 從打造一個 API 開始學起30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言