<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      gin 使用 jwt

      作用

      JWT 的主要作用是方便客戶端與伺服器之間的身份驗證。 使用JWT 可以在不需要每次登入的情況下,在客戶端與伺服器之間安全地傳遞封裝身份信息。 它還可以用於許多其他用途,例如串接多個服務,並將數據在服務間安全地傳遞。

      簡單類說jwt作用在c/s模型中的通信過程中,用于驗證c端是否具有訪問權限。

      一般在jwt中包含一些基本信息,包括用戶名,時間戳等??梢栽谝欢ǔ袚戏乐怪胤殴簟?/p>

      注意:自jwt的內容部分,切勿包含任何如密碼等敏感信息,因為jwt是使用明文傳遞的。

      在jwt中需要雙發線下協商一個所secret,在之后的請求中c端將使用這個secret最jwt做簽名,服務端使用這個secret驗證簽名,簽名的內容明文傳輸。

      在gin中使用jwt

      gin可以使用中間件的形式完成jwt校驗

      	// node config group
      	nodeGroup := router.Group(methods.NodeTag, methods.JWTMiddleware())
      	initNodeConfigControllers(nodeGroup)

      以上是在 NodeTag 這個請求組里面添加JWT校驗,這樣只作用與這一個請求組,也可以針對某個請求做校驗或全部請求都做校驗。

      注意,一般將JWT的token放在請求頭里面,不要放在請求體里面

      JWT校驗函數一般格式

      func JWTMiddleware() gin.HandlerFunc {
      	return func(ctx *gin.Context) {
      		user_token := ctx.GetHeader("Authorization")
      		token, err := jwt.Parse(user_token, 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(configuration.GetToken()), nil // 此處GetToken得到的就是雙發協定好的secret
      		})
      		if err != nil {
      			log.Error("Token parsing error", "err", err)
      			ReturnErrorResp(ctx, http.StatusUnauthorized, PermissionError, err.Error())
      			ctx.Abort()
      			return
      		}
      
      		// 驗證解析后的令牌是否有效
      		if !token.Valid {
      			log.Error("Invalid token")
      			ReturnErrorResp(ctx, http.StatusUnauthorized, PermissionError, "token is ill")
      			ctx.Abort()
      			return
      		} else {
      			// 從令牌中提取有效載荷 (claims)
      			claims, ok := token.Claims.(jwt.MapClaims)
      			if ok {
      				if !claims.VerifyExpiresAt(time.Now().Unix(), true) {
      					log.Error("jwt token timeout")
      					ReturnErrorResp(ctx, http.StatusUnauthorized, PermissionError, "token is ill")
      					ctx.Abort()
      					return
      				}
      			} else {
      				log.Error("Invalid token claims")
      				ReturnErrorResp(ctx, http.StatusUnauthorized, PermissionError, "token is ill")
      				ctx.Abort()
      				return
      			}
      		}
      		ctx.Next()
      	}
      }
      posted @ 2024-01-26 17:46  bighu  閱讀(133)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 国产真实伦在线观看视频| 国产综合精品一区二区三区| 日韩高清福利视频在线观看| 国产亚洲视频免费播放| 国产午夜精品福利视频| 丰满人妻一区二区三区色| 福利在线视频一区二区| 艳妇臀荡乳欲伦69调教视频| 午夜亚洲国产理论片亚洲2020| 国产精品系列在线免费看| 热久久美女精品天天吊色| 国产区成人精品视频| 成人亚洲一级午夜激情网| 97精品伊人久久大香线蕉APP| 勐海县| 国产精品不卡一区二区三区| caoporn成人免费公开| 躁躁躁日日躁| 欧美性猛交xxxx免费看| 国产一区二区三区高清视频| 欧洲性开放老太大| 日韩不卡在线观看视频不卡| 亚洲高清激情一区二区三区| 久久96热在精品国产高清| 熟女少妇精品一区二区| 国产一区二区午夜福利久久 | 国色天香成人一区二区 | 区一区二区三区中文字幕| 97久久精品亚洲中文字幕无码| 国产AV国片精品有毛| 久久国内精品自在自线91| 久久精品国产99久久6| 四虎影视一区二区精品| 漂亮的保姆hd完整版免费韩国| 久久久亚洲欧洲日产国码606| 99久久激情国产精品| 国产69久久精品成人看| 成人av午夜在线观看| 激情五月日韩中文字幕| 国产熟女一区二区三区四区| 日本三级香港三级人妇99|