本文同步發表於: Sponge Records
本文將介紹如何用 golang 實作 jwt 的產生與驗證,來達到網站與 api 驗證的功能
上一回我們有提到 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-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
}
下回將會實作會員帳號修改的功能,讓會員可以改自己的密碼,增加安全性