1. 程式人生 > >go程式碼實現jwt

go程式碼實現jwt

import  "github.com/dgrijalva/jwt-go"
var Secret string = "crypto"

注意如下 claims["iat"] 賦值不要用token.Claims["iat"]會報錯(type jwt.Claims does not support indexing)

func (c Reg) Sign(uuid string, secret string) string {//生成token,演算法hs256

    token := jwt.New(jwt.SigningMethodHS256)
    claims := make(jwt.MapClaims)
    claims["iat"] = time.Now().Unix()
    claims["id"] = uuid
    claims["secret"] = secret //需私鑰加密
    token.Claims = claims
    s, err := token.SignedString([]byte(secret))
    if err != nil {
        panic(err)
    }
    return s
}
func (c Reg) getValidationKey(*jwt.Token) (interface{}, error) {
     return []byte(Secret), nil
}

//驗證解析token
func (c Reg) VerifyToken(deviceuuid string, input string, secret string) (jwt.Claims, string) {
    token, err := jwt.Parse(input, c.getValidationKey)
    if err != nil {
        return nil, err.Error()
    }
    if jwt.SigningMethodHS256.Alg() != token.Header["alg"] {
        return nil, "header err!"
    }
    if claims,ok := token.Claims.(jwt.MapClaims); ok && token.Valid {//取出token中的資料
        if claims["id"] != deviceuuid {
            return nil, "token claims err"
        }
    }
    fmt.Printf("verify pass!!!")
    return token.Claims, ""
} 
func main () {
    token_new := c.Sign(deviceuuid, Secret)
    VerifyToken(deviceuuid, token_new, Secret)
}





相關推薦

go程式碼實現jwt

import "github.com/dgrijalva/jwt-go" var Secret string = "crypto"注意如下 claims["iat"] 賦值不要用token.Claims["iat"]會報錯(type jwt.Claims does no

200行Go程式碼實現一個區塊鏈之二——區塊生成與網路通訊

在上一篇文章中,我們向大家展示瞭如何通過精煉的Go程式碼實現一個簡單的區塊鏈。如何計算每個塊的 Hash 值,如何驗證塊資料,如何讓塊連結起來等等,但是所有這些都是跑在一個節點上的。文章釋出後,讀者反響熱烈,紛紛留言讓我快點填坑(網路部分),於是就誕生了這第二篇文章。這篇文章

200行go程式碼實現區塊鏈

你可以學到什麼 建立自己的blockchain 理解雜湊演算法是怎樣保證blockchain的完整性 理解新塊是如何被新增的 如何解決多個節點競爭問題 通過瀏覽器來檢視你的blockchain 寫新的blocks 對blockchain有基本的瞭解

SpringSecurity程式碼實現JWT介面許可權授予與校驗

通過筆者前兩篇文章的說明,相信大家已經知道JWT是什麼,怎麼用,該如何結合Spring Security使用。那麼本節就用程式碼來具體的實現一下JWT登入認證及鑑權的流程。 一、環境準備工作 建立Spring Boot專案並集成了Spring Security,專案可以正常啟動 通過controller寫一

Go語言實現以太坊交易傳送程式碼

轉載請註明。 talk is cheap show you the code import ( "math/big" "testing" "github.com/ethereum/go-ethereum/crypto" "github.com/ethereum/g

go語言程式碼實現區塊鏈-P2P節點發現(二)

繼續上一章節 Loop函式程式碼如下: func(k *Kad) loop(){ log.Println("go loop...") loop: for{ select{ case <-k.ticker.C: //定時檢測node數量,如

2000行程式碼go語言實現的比特幣基本的相關模型功能

|版權宣告:本文為博主原創文章,未經博主允許不得轉載。部落格地址:https://blog.csdn.net/sgsgy5 前言:閒暇時期,參考了一些資料,用go簡單的實現了比特幣中的一些相關功能,實現完全大概2000行程式碼左右,現在剛利用閒暇時間寫了一點小

GO語言quicksort實現.快速排序法程式碼實現

package main import ( "fmt" "math/rand" "time" ) func main() { var z []int for i := 0; i <

如何利用go-zero在Go中快速實現JWT認證

關於JWT是什麼,大家可以看看[官網](https://jwt.io/),一句話介紹下:是可以實現伺服器無狀態的鑑權認證方案,也是目前最流行的跨域認證解決方案。 要實現JWT認證,我們需要分成如下兩個步驟 * 客戶端獲取JWT token。 * 伺服器對客戶端帶來的JWT token認證。 ## 1.

【區塊鏈Go語言實現】第一部分:區塊鏈基本原型

ont 構建 獲得 列表 append 檢查 世紀 正常 私有 0x00 介紹 區塊鏈(Blockchain)是21世紀最具革命性的技術之一,目前它仍處於逐漸成熟階段,且其發展潛力尚未被完全意識到。從本質上講,區塊鏈只是一種記錄的分布式數據庫。但它之所以獨特,是因為它並

go語言實現 tcp客戶端/服務端

tcpl sem close byte cpc cep 實現 lee n) / server.go /package main import ("bufio""fmt""net""time")

go語言實現udp客戶端/服務端

rom client nic exit nil 客戶 ddr close udp / server.go /package main import ("fmt""net""os") func checkError

go語言實現unix domain socket 客戶端/服務端

sock domain tin soc reader ted ips for urn /*server.go */package mainimport ( "bufio" "fmt" &quo

Go自己實現配置文件熱加載功能

熱加載 ngs 文件中 讀寫 pre ack 接口 取出 修改文件 說到配置文件熱加載,這個功能在很多框架中都提供了,如beego,實現的效果就是當你修改文件後,會把你修改後的配置重新加載到配置文件中,而不用重啟程序,這個功能在日常中還是非常實用的,畢竟很多時候,線上的配置

go語言實現簡單的聊天室

tcp協議 golang聊天室通常聊天室的架構分為服務器端和客戶端: 服務器端:接受來自於客戶端的連接請求並建立連接;所有客戶端的連接會放進連接池中,用於廣播消息; 客戶端:連接服務器;向服務器發送消息;接收服務器的廣播消息; 註意事項:某一個客戶端斷開連接後需要從連接池中摘除,並不再接收廣播消息;某一個客戶

go語言實現數組去重

bsp clas == 實現 int list div append func import ( "fmt" ) func main() { a := []int{2, 1, 2, 5, 6, 3, 4, 5, 2, 3, 9} z := Rm_

Go語言實現FastDFS分布式存儲系統WebAPI網關

net [] ima 分布式存 make type go web upload listen 前言   工作需要,第一次使用 Go 來實戰項目。   需求:采用 golang 實現一個 webapi 的中轉網關,將一些資源文件通過 http 協議上傳至 FastDFS

go語言實現類似java8的Stream

4.4 代碼 歸納 Go語言 浮點 print jdk 是我 遞歸 JDK8 Stream 是一個支持泛型和函數式數據流,使用起來非常強大方便。最近在學習 go 語言我就用 go 模仿了一下類似的功能,由於 go 對泛型、函數式的支持比較有限,感覺泛型和函數式這一塊實現起來

python 三行程式碼實現快速排序

python 三行程式碼實現快速排序 最近在看 python cookbook , 裡面的例子很精彩,這裡就幫過來,做個備忘錄 主要利用了行數的遞迴呼叫和Python的切片特性,解釋一下每行程式碼的含義: 第1行: #coding:utf-8 指定utf

WordCount程式碼實現及測試

1.專案地址: 開發者:201631062515 201631062415 碼雲地址:https://gitee.com/heshuxiang/WordCount/tree/master 2.專案需求     對程式設計語言原始檔統計字元數、單詞數、行數,統計結果以指定格式輸出到預