婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > golang之JWT實現的示例代碼

golang之JWT實現的示例代碼

熱門標簽:澳門防封電銷卡 烏魯木齊人工電銷機器人系統 福州鐵通自動外呼系統 長沙ai機器人電銷 地圖標注測試 賺地圖標注的錢犯法嗎 智能電銷機器人營銷 廣東語音外呼系統供應商 濮陽自動外呼系統代理

什么是JSON Web Token?

JSON Web Token(JWT)是一個開放標準(RFC 7519),它定義了一種緊湊且自包含的方式,用于在各方之間以JSON方式安全地傳輸信息。由于此信息是經過數字簽名的,因此可以被驗證和信任。可以使用秘密(使用HMAC算法)或使用RSA或ECDSA的公鑰/私鑰對對JWT進行簽名。

直白的講jwt就是一種用戶認證(區別于session、cookie)的解決方案。

出現的背景

眾所周知,在jwt出現之前,我們已經有session、cookie來解決用戶登錄等認證問題,為什么還要jwt呢?

這里我們先了解一下session,cookie。

session

熟悉session運行機制的同學都知道,用戶的session數據以file或緩存(redis、memcached)等方式存儲在服務器端,客戶端瀏覽器cookie中只保存sessionid。服務器端session屬于集中存儲,數量不大的情況下,沒什么問題,當用戶數據逐漸增多到一程度,就會給服務端管理和維護帶來大的負擔。

session有兩個弊端:

1、無法實現跨域。

2、由于session數據屬于集中管理里,量大的時候服務器性能是個問題。

優點:

1、session存在服務端,數據相對比較安全。

2、session集中管理也有好處,就是用戶登錄、注銷服務端可控。

cookie

cookie也是一種解決網站用戶認證的實現方式,用戶登錄時,服務器會發送包含登錄憑據的Cookie到用戶瀏覽器客戶端,瀏覽器會將Cookie的key/value保存用戶本地(內存或硬盤),用戶再訪問網站,瀏覽器會發送cookie信息到服務器端,服務器端接收cookie并解析來維護用戶的登錄狀態。

cookie避免session集中管理的問題,但也存在弊端:

1、跨域問題。

2、數據存儲在瀏覽器端,數據容易被竊取及被csrf攻擊,安全性差。

優點:

1、相對于session簡單,不用服務端維護用戶認證信息。

2、數據持久性。

jwt

jwt通過json傳輸,php、java、golang等很多語言支持,通用性比較好,不存在跨域問題。傳輸數據通過數據簽名相對比較安全。客戶端與服務端通過jwt交互,服務端通過解密token信息,來實現用戶認證。不需要服務端集中維護token信息,便于擴展。當然jwt也有其缺點。

缺點:

1、用戶無法主動登出,只要token在有效期內就有效。這里可以考慮redis設置同token有效期一直的黑名單解決此問題。

2、token過了有效期,無法續簽問題。可以考慮通過判斷舊的token什么時候到期,過期的時候刷新token續簽接口產生新token代替舊token。

jwt設置有效期

可以設置有效期,加入有效期是為了增加安全性,即token被黑客截獲,也只能攻擊較短時間。設置有效期就會面臨token續簽問題,解決方案如下

通常服務端設置兩個token

  • Access Token:添加到 HTTP 請求的 header 中,進行用戶認證,請求接口資源。
  • refresh token:用于當 Access Token過期后,客戶端傳遞refresh token刷新 Access Token續期接口,獲取新的Access Token和refresh token。其有效期比 Access Token有效期長。

jwt構成:

  • Header:TOKEN 的類型,就是JWT,簽名的算法,如 HMAC SHA256、HS384
  • Payload:載荷又稱為Claim,攜帶的信息,比如用戶名、過期時間等,一般叫做 Claim
  • Signature:簽名,是由header、payload 和你自己維護的一個 secret 經過加密得來的

jwt使用

這里推薦個使用比較多的開源項目[github.com/dgrijalva/jwt-go](),更多文檔。

示例:

package main

import (
  "fmt"
  "github.com/dgrijalva/jwt-go"
  "time"
)
const (
  SECRETKEY = "243223ffslsfsldfl412fdsfsdf"http://私鑰
)
//自定義Claims
type CustomClaims struct {
  UserId int64
  jwt.StandardClaims
}
func main() {
  //生成token
  maxAge:=60*60*24
  customClaims :=CustomClaims{
    UserId: 11,//用戶id
    StandardClaims: jwt.StandardClaims{
      ExpiresAt: time.Now().Add(time.Duration(maxAge)*time.Second).Unix(), // 過期時間,必須設置
      Issuer:"jerry",  // 非必須,也可以填充用戶名,
    },
  }
  //采用HMAC SHA256加密算法
  token:=jwt.NewWithClaims(jwt.SigningMethodHS256, customClaims)
  tokenString,err:= token.SignedString([]byte(SECRETKEY))
  if err!=nil {
    fmt.Println(err)
  }
  fmt.Printf("token: %v\n", tokenString)

  //解析token
  ret,err :=ParseToken(tokenString)
  if err!=nil {
    fmt.Println(err)
  }
  fmt.Printf("userinfo: %v\n", ret)
}

//解析token
func ParseToken(tokenString string)(*CustomClaims,error) {
  token, err := jwt.ParseWithClaims(tokenString, CustomClaims{}, func(token *jwt.Token) (interface{}, error) {
    if _, ok := token.Method.(*jwt.SigningMethodHMAC); !ok {
      return nil, fmt.Errorf("Unexpected signing method: %v", token.Header["alg"])
    }
    return []byte(SECRETKEY), nil
  })
  if claims, ok := token.Claims.(*CustomClaims); ok  token.Valid {
    return claims,nil
  } else {
    return nil,err
  }
}

運行結果:

token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJVc2VySWQiOjExLCJleHAiOjE1OTA5MTk1NDAsImlzcyI6ImplcnJ5In0.FppmbbHRrS4wd5wen73vYPOvtzycOrn2JZlK6JRjEGk
userinfo: {11 { 1590919540 0 jerry 0 }}

以上用到了CustomClaims,也可以用簡單的方法

示例

package main

import (
  "fmt"
  "github.com/dgrijalva/jwt-go"
  "time"
)
const (
  SECRETKEY = "243223ffslsfsldfl412fdsfsdf"http://私鑰
)
//自定義Claims
type CustomClaims struct {
  UserId int64
  jwt.StandardClaims
}
func main() {
  //生成token
  maxAge:=60*60*24
  // Create the Claims
  //claims := jwt.StandardClaims{
  //  //  ExpiresAt: time.Now().Add(time.Duration(maxAge)*time.Second).Unix(), // 過期時間,必須設置,
  //  //  Issuer:  "jerry",// 非必須,也可以填充用戶名,
  //  //}

  //或者用下面自定義claim
  claims := jwt.MapClaims{
    "id":    11,
    "name":    "jerry",
    "exp": time.Now().Add(time.Duration(maxAge)*time.Second).Unix(), // 過期時間,必須設置,
  }

  token := jwt.NewWithClaims(jwt.SigningMethodHS256, claims)
  tokenString, err := token.SignedString([]byte(SECRETKEY))
  if err!=nil {
    fmt.Println(err)
  }
  fmt.Printf("token: %v\n", tokenString)

  //解析token
  ret,err :=ParseToken(tokenString)
  if err!=nil {
    fmt.Println(err)
  }
  fmt.Printf("userinfo: %v\n", ret)
}

//解析token
func ParseToken(tokenString string)(jwt.MapClaims,error) {
  token, err := jwt.Parse(tokenString, func(token *jwt.Token) (interface{}, error) {
    // Don't forget to validate the alg is what you expect:
    if _, ok := token.Method.(*jwt.SigningMethodHMAC); !ok {
      return nil, fmt.Errorf("Unexpected signing method: %v", token.Header["alg"])
    }

    // hmacSampleSecret is a []byte containing your secret, e.g. []byte("my_secret_key")
    return []byte(SECRETKEY), nil
  })
  if claims, ok := token.Claims.(jwt.MapClaims); ok  token.Valid {
    return claims,nil
  } else {
    return nil,err
  }
}

運行結果類似

token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE1OTA5MzUzMDUsImlkIjoxMSwibmFtZSI6ImplcnJ5In0.fapE0IiOEe_TqoMCThbNTHUvgWiHPEk0rm-9uPIcvPU
userinfo: map[exp:1.590935305e+09 id:11 name:jerry]

小結:

  • 服務端生成的jwt返回客戶端可以存到cookie也可以存到localStorage中(相比cookie容量大),存在cookie中需加上 HttpOnly 的標記,可以防止 XSS) 攻擊。
  • 盡量用https帶證書網址訪問。
  • session和jwt沒有絕對好與不好,各有其擅長的應用環境,請根據實際情況選擇。

參考資料

https://github.com/guyan0319/golang_development_notes

https://godoc.org/github.com/dgrijalva/jwt-go

https://blog.csdn.net/weixin_43613053/article/details/84642140

https://www.cnblogs.com/flipped/p/12973557.html

到此這篇關于golang之JWT實現的示例代碼的文章就介紹到這了,更多相關golang JWT實現內容請搜索腳本之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持腳本之家!

您可能感興趣的文章:
  • 詳解Go-JWT-RESTful身份認證教程

標簽:調研邀請 德州 西雙版納 貴陽 太原 慶陽 阿克蘇 廣西

巨人網絡通訊聲明:本文標題《golang之JWT實現的示例代碼》,本文關鍵詞  golang,之,JWT,實現,的,示例,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《golang之JWT實現的示例代碼》相關的同類信息!
  • 本頁收集關于golang之JWT實現的示例代碼的相關信息資訊供網民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    免播放器亚洲一区| 欧美少妇xxx| 日韩国产高清在线| 日本不卡免费在线视频| 岛国一区二区在线观看| 蜜桃视频一区二区| 蜜桃久久久久久| 综合久久综合久久| 国产精品拍天天在线| 一区二区成人在线| 麻豆精品视频在线观看视频| 99精品久久久久久| a在线欧美一区| 国产成人午夜99999| www.亚洲人| 欧美性色欧美a在线播放| 精品99一区二区三区| 色婷婷综合五月| 综合欧美亚洲日本| av一本久道久久综合久久鬼色| 99国产精品久久久久久久久久 | 99精品视频在线播放观看| 日本高清成人免费播放| av激情亚洲男人天堂| 4438x亚洲最大成人网| 国产精品久久国产精麻豆99网站| 日韩av电影免费观看高清完整版 | 精品国产不卡一区二区三区| 懂色av一区二区三区免费观看| 免费视频最近日韩| 国产在线国偷精品产拍免费yy| 91久久香蕉国产日韩欧美9色| 欧美一二三在线| 亚洲人成精品久久久久久| 久久9热精品视频| 91在线看国产| 久久免费电影网| 日本美女一区二区三区视频| 色综合视频一区二区三区高清| 久久综合九色综合欧美就去吻| 亚洲一区欧美一区| www.性欧美| 国产精品午夜电影| 国产一区二区久久| 日韩免费电影网站| 午夜精品一区二区三区免费视频 | 欧美在线你懂得| 国产欧美日韩综合精品一区二区| 日日摸夜夜添夜夜添精品视频| 色狠狠综合天天综合综合| 国产精品每日更新在线播放网址| 国产乱码精品一区二区三区五月婷| 91麻豆精品国产91| 亚洲成人av电影在线| 色婷婷国产精品综合在线观看| 国产精品国模大尺度视频| 国产69精品久久99不卡| 久久久av毛片精品| 狠狠色狠狠色综合| 精品欧美一区二区三区精品久久 | 亚洲一区二区三区在线| 欧美高清你懂得| 综合电影一区二区三区 | 成人开心网精品视频| 久久婷婷国产综合精品青草| 国产一区二区三区精品视频| 久久网站热最新地址| 国产乱人伦偷精品视频不卡| 国产视频不卡一区| www.日韩大片| 一区二区三区不卡视频在线观看 | 国产精品美女久久久久aⅴ| www.66久久| 亚洲精品国产一区二区精华液| 色婷婷精品久久二区二区蜜臂av| 亚洲精品福利视频网站| 欧美日韩黄色一区二区| 日本视频中文字幕一区二区三区| 日韩一区二区在线观看视频| 九九热在线视频观看这里只有精品| 精品免费99久久| 丁香桃色午夜亚洲一区二区三区| 中文字幕日韩一区| 欧美午夜在线一二页| 免费一级片91| 中文字幕高清不卡| 欧美亚男人的天堂| 久久91精品国产91久久小草| 亚洲精品在线电影| 久久综合中文字幕| 五月综合激情婷婷六月色窝| 日本中文字幕一区| 丁香五精品蜜臀久久久久99网站 | 欧美日韩情趣电影| 91福利国产精品| 日韩午夜三级在线| 久久久久久久网| 久久丝袜美腿综合| 欧美网站大全在线观看| 日韩电影网1区2区| 国产无人区一区二区三区| 91在线看国产| 奇米精品一区二区三区在线观看一 | 国产精品久久久久影院亚瑟| 欧美在线你懂得| 国产麻豆视频精品| 性做久久久久久久久| 久久久久久久久久久电影| 色婷婷综合激情| 国产一区二区三区四区在线观看| 亚洲欧美日韩小说| 久久综合九色综合欧美98| 欧美熟乱第一页| caoporm超碰国产精品| 麻豆成人综合网| 亚洲亚洲精品在线观看| 久久午夜电影网| 欧美精品成人一区二区三区四区| 不卡区在线中文字幕| 亚洲国产精品久久人人爱| 久久久久久久久免费| 6080午夜不卡| 91黄色免费看| k8久久久一区二区三区| 狠狠色狠狠色合久久伊人| 肉色丝袜一区二区| 一区二区在线观看av| 国产精品每日更新| 国产欧美日韩不卡免费| 精品久久久久久无| 5858s免费视频成人| 欧美色网一区二区| 色哟哟一区二区在线观看| 成人激情综合网站| 国产很黄免费观看久久| 久久激情综合网| 免费看精品久久片| 日本特黄久久久高潮| 视频在线观看91| 日韩久久久精品| 91超碰这里只有精品国产| 亚洲精品中文在线观看| 在线视频国内一区二区| 国产91丝袜在线播放| 日韩精品一级二级| 欧美电影免费观看高清完整版在线 | 国产精品一二三在| 亚洲欧美一区二区久久 | 国产经典欧美精品| 亚洲另类春色国产| 亚洲美女屁股眼交3| 亚洲人精品午夜| 亚洲欧美二区三区| 亚洲精品亚洲人成人网在线播放| 中文字幕永久在线不卡| 综合久久国产九一剧情麻豆| 国产精品久久久久久久浪潮网站| 久久久久国产免费免费| 国产精品视频线看| 亚洲人成在线观看一区二区| 亚洲伊人色欲综合网| 亚洲一区二区三区不卡国产欧美 | 成人av网站免费| 99国产精品久久久久久久久久| av动漫一区二区| 色美美综合视频| 欧美性色综合网| 日韩一区二区电影在线| www精品美女久久久tv| 国产精品―色哟哟| 亚洲猫色日本管| 视频在线观看国产精品| 国产精品一区二区三区99| av不卡免费在线观看| 欧美影院一区二区| 精品国产免费一区二区三区香蕉| 国产欧美精品一区aⅴ影院 | 岛国精品一区二区| 精品视频一区二区三区免费| 久久久久久久久伊人| 亚洲精品欧美激情| 狠狠网亚洲精品| 精品视频资源站| 中文字幕亚洲精品在线观看| 日韩国产欧美三级| 天堂影院一区二区| 国产精品77777| 欧美日韩aaaaaa| 国产午夜精品在线观看| 一区二区成人在线| 精品一区二区三区免费| 一本久久精品一区二区| 久久免费视频一区| 午夜一区二区三区在线观看| 91久久免费观看| 欧美性受xxxx黑人xyx性爽| 日韩激情一区二区| av亚洲精华国产精华| 日韩久久免费av| 免费xxxx性欧美18vr|