golang JWT jeton d'authentification paquet

introduction

JWT:

  • json jeton de bande, est une spécification
  • Il se compose de trois parties
    • tête-tête
    • Payload PayLoad
    • signature signature
  • Utilisation . Pour la partie supérieure 3 est reliée
  • « Jeton »: " ""." En-tête + + + + Signature PayLoad
Entête

l'action en-tête est utilisé pour indiquer l'algorithme de chiffrement utilisé pour signer le

{
	"typ":"JWT",
	"alg":"HS256"lag
}

Modifier généralement d'abord des données codées en base64 après épissage JSON

Charge utile

Payload pour stocker une partie des informations, ce qui devrait contenir des réclamations

réclamations
Audience string `json:"aud,omitempty"`  
ExpiresAt int64 `json:"exp,omitempty"`  
Id string `json:"jti,omitempty"` 
IssuedAt int64 `json:"iat,omitempty"`  
Issuer string `json:"iss,omitempty"`  
NotBefore int64 `json:"nbf,omitempty"`  
Subject string `json:"sub,omitempty"`
1. aud 标识token的接收者.
2. exp 过期时间.通常与Unix UTC时间做对比过期后token无效
3. jti 是自定义的id号 
4. iat 签名发行时间.
5. iss 是签名的发行者.
6. nbf 这条token信息生效时间.这个值可以不设置,但是设定后,一定要大于当前Unix UTC,否则token将会延迟生效.
7. sub 签名面向的用户

Dans lequel, si la définition expet iatpuis avec le dos jwt.Parse()quand il vérifiera automatiquement si expiré

Après la première charge utile aussi généralement Base64 avant épissage ultérieure

Signature

Les algorithmes de chiffrement et l'application en-tête en-tête Payload données JSON (généralement la clé privée ainsi définie par l'utilisateur) par

JWT 包

aller chercher github.com/dgrijalva/jwt-go

utilisation

Générer un jeton
import (
	"time"
	"github.com/dgrijalva/jwt-go"
)

var key string = "key"

func GenerateToken() (string, error) {
	token := jwt.new(jwt.SigningMethodHS256)
	claims := make(jwt.MapClaims)
	claims["sub"] = 1 //用于在controller中确定用户
	claims["exp"] = time.Now().Add(time.Hour.Truncate(72)) //设置过期时间为72小时后
	clamis["iat"] = time.Now().Unix()//用作和exp对比的时间
	token.Claims = claims

	tokenString, err := token.SignedString([]byte(key))
	if err != nil {
		return nil, err
	}
	return tokenString, nil
}
vérification jeton

Généralement utilisé comme middleware pour vérifier si l'utilisateur est légal

import (
	"fmt"
	"time"

	"github.com/dgrijalva/jwt-go"
)

var key string = "key"

func AuthCheck(tokenString string) bool {
	token := jwt.Parse(tokenString, func(token *jwt.Token) (interface{}, error)) {
	//验证是否是给定的加密算法
	_, ok := token.Method.(*jwt.SigningMethodHMAC)
	if !ok {
		return false
	}
	return []byte(key)
  })
	if !token.Valid {
		return false
	} else {
		claims := token.Claims.(jwt.MapClaims)
		fmt.Println(claims["sub"])
		return true
	}
}

enfin

Jeton généré comme celui-ci

eyJfasghabgdsgI1NiIsInRfasfaVCJ9.eyJleHAiOjE1NDA2MDgyODgsdasaI6IllEUgasgasdaiwiYWRtaW4iOnRydWV9.8wE-_Wx-DHIqweXJ9KT5JOdasCEaUNEIGDy9CUbM
Publié 48 articles originaux · a gagné les éloges 56 · vues 20000 +

Je suppose que tu aimes

Origine blog.csdn.net/zhetmdoubeizhanyong/article/details/102568887
conseillé
Classement