Golang token的生成和解析詳解
更新時間:2024年02月11日 10:18:58 作者:gogogo不想敲代碼
這篇文章主要給大家介紹了Golang token的生成和解析,文中通過代碼示例給大家介紹的非常詳細,對大家的學習或工作有一定的幫助,需要的朋友可以參考下
Golang token的生成和解析
使用第三方庫來實現(xiàn)
go get github.com/dgrijalva/jwt-go
golang代碼
package main import ( "fmt" "time" "github.com/dgrijalva/jwt-go" ) func main() { // 生成Token tokenString := generateToken("example-user", "secret-key") fmt.Println("Token:", tokenString) // 解密Token claims, err := parseToken(tokenString, "secret-key") if err != nil { fmt.Println("解密Token失敗:", err) return } // 獲取Token中的自定義聲明 if username, ok := claims["username"].(string); ok { fmt.Println("Username:", username) } } func generateToken(username string, secretKey string) string { // 創(chuàng)建一個Token對象 token := jwt.New(jwt.SigningMethodHS256) // 設(shè)置Token的自定義聲明 claims := token.Claims.(jwt.MapClaims) claims["username"] = username claims["exp"] = time.Now().Add(time.Hour * 24).Unix() // 設(shè)置Token的過期時間 // 使用密鑰對Token進行簽名,生成最終的Token字符串 tokenString, _ := token.SignedString([]byte(secretKey)) return tokenString } func parseToken(tokenString string, secretKey string) (jwt.MapClaims, error) { // 解析Token字符串 token, err := jwt.Parse(tokenString, func(token *jwt.Token) (interface{}, error) { return []byte(secretKey), nil }) if err != nil { return nil, err } // 驗證Token的簽名方法是否有效 if _, ok := token.Method.(*jwt.SigningMethodHMAC); !ok { return nil, fmt.Errorf("無效的簽名方法:%v", token.Header["alg"]) } // 返回Token中的聲明部分 if claims, ok := token.Claims.(jwt.MapClaims); ok && token.Valid { return claims, nil } return nil, fmt.Errorf("無效的Token") }
消息中間件
func JWT() gin.HandlerFunc { return func(c *gin.Context) { c.Abort() c.Next() } }
到此這篇關(guān)于Golang token的生成和解析詳解的文章就介紹到這了,更多相關(guān)Golang token生成和解析內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Golang?依賴注入經(jīng)典解決方案uber/fx理論解析
這篇文章主要為大家介紹了Golang依賴注入經(jīng)典解決方案uber/fx理論解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-05-05