Maison >développement back-end >Golang >Pratique de programmation de serveur de langage Go : utiliser JWT pour protéger les interfaces API
À l'ère d'Internet d'aujourd'hui, avec la popularité des applications Web, les API (Application Programming Interface, interfaces de programmation d'applications) sont de plus en plus concernées et utilisées par les développeurs. Et protéger la sécurité de l’interface API est une question très importante. Cet article prendra le langage Go comme exemple pour présenter comment utiliser JWT (JSON Web Token) pour protéger la sécurité des interfaces API.
1. Qu'est-ce que JWT
Le nom complet de JWT est JSON Web Token, qui est une norme ouverte (RFC 7519) utilisée pour transmettre des informations sécurisées entre les parties. JWT peut authentifier, autoriser et échanger des informations. JWT est couramment utilisé pour transmettre des informations d'authentification dans des applications Web ou des API.
Dans JWT, il se compose de trois parties : en-tête, charge utile et signature.
L'en-tête se compose généralement de deux parties : le type de jeton (c'est-à-dire JWT) et le nom de l'algorithme (tel que HMAC SHA256 ou RSA).
{
"alg": "HS256",
"typ": "JWT"
}
La charge utile contient des informations fiables et utiles, telles que l'ID utilisateur ou les droits d'accès. Des revendications personnalisées peuvent être ajoutées à la charge utile (il est recommandé d'utiliser uniquement des noms de revendications enregistrés).
{
"sub": "1234567890",
"name": "John Doe",
"iat": 1516239022
}
Afin de vérifier si le JWT est authentique et valide, vous devez utiliser un secret. Signez le JWT avec la clé et l'algorithme spécifiés dans l'en-tête.
HMACSHA256(
base64UrlEncode(header) + "." +
base64UrlEncode(payload),
votre secret de 256 bits
)
Deuxièmement, utilisez JWT pour protéger l'interface API
Vous devez d'abord installer le package de dépendances JWT du langage Go :
allez chercher github.com/dgrijalva/jwt-go
Lorsque vous utilisez JWT pour protéger l'interface API, vous devez générer et vérifiez JWT. Voici un exemple de code simple pour générer et vérifier JWT :
Generate JWT
func GenerateToken(userid string) (string, error) {
token := jwt.NewWithClaims(jwt.SigningMethodHS256, jwt.MapClaims{ "userid": userid, "exp": time.Now().Add(time.Hour * 24 * 7).Unix(), //有效期一周 }) tokenString, err := token.SignedString([]byte("mysecretkey")) if err != nil { return "", err } return tokenString, nil
}
Verify JWT
func ValidateToken(tokenString string) ( bool, string ) {
token, err := jwt.Parse(tokenString, func(token *jwt.Token) (interface{}, error) { return []byte("mysecretkey"), nil }) if err == nil && token.Valid { claims := token.Claims.(jwt.MapClaims) userid := claims["userid"].(string) //取出userid return true, userid } else { return false, "" }
}
Dans l'interface API, vous devez d'abord lire le JWT à partir de la requête HTTP et le vérifier. Si la vérification réussit, l'accès à l'interface API est autorisé, sinon une erreur 403 (aucune autorisation) est renvoyée.
Ce qui suit est un exemple de code :
func myAPIHandler(w http.ResponseWriter, r *http.Request) {
tokenString := r.Header.Get("Authorization") //从HTTP请求中获取JWT if tokenString == "" { w.WriteHeader(http.StatusForbidden) return } tokenString = strings.TrimPrefix(tokenString, "Bearer ") ok, userid := ValidateToken(tokenString) //校验JWT if !ok { w.WriteHeader(http.StatusForbidden) return } // 对于登录用户,可以从JWT中获取用户信息(例如userid),并进行权限控制 // ... // 处理API请求 // ...
}
3.Résumé
L'utilisation de JWT peut protéger efficacement la sécurité de l'interface API et garantir que seuls les utilisateurs autorisés peuvent accéder à l'interface API. En langage Go, l'utilisation de JWT est également très simple. Il vous suffit d'installer les packages de dépendances et d'écrire le code correspondant. Parallèlement, afin de protéger la sécurité de l'interface API, d'autres mesures de sécurité sont également requises, telles que le cryptage HTTPS, les paramètres du pare-feu, la surveillance des journaux, etc.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!