Maison  >  Article  >  développement back-end  >  Pratique de programmation de serveur de langage Go : utiliser JWT pour protéger les interfaces API

Pratique de programmation de serveur de langage Go : utiliser JWT pour protéger les interfaces API

WBOY
WBOYoriginal
2023-06-18 16:55:281067parcourir

À 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.

  1. En-tête

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"
}

  1. Payload

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
}

  1. Signature (Signature)

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

  1. Installez les dépendances JWT

Vous devez d'abord installer le package de dépendances JWT du langage Go :

allez chercher github.com/dgrijalva/jwt-go

  1. Génération et vérification JWT

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, ""
}

}

  1. Utilisez le mécanisme de vérification JWT dans l'interface API

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn