Heim  >  Artikel  >  Backend-Entwicklung  >  Verwendung der jwt-go-Bibliothek zur Implementierung der JWT-Token-Überprüfung und -Authentifizierung in der Go-Sprache

Verwendung der jwt-go-Bibliothek zur Implementierung der JWT-Token-Überprüfung und -Authentifizierung in der Go-Sprache

PHPz
PHPzOriginal
2024-01-22 11:19:551149Durchsuche

在Go语言中使用jwt-go库实现JWT Token鉴权

Verwenden Sie die jwt-go-Bibliothek, um die JWT-Token-Authentifizierung in der Go-Sprache zu implementieren.

JWT (JSON Web Token) ist eine einfache Authentifizierungs- und Autorisierungsmethode, die uns bei der Kommunikation zwischen Benutzern und Systemen basierend auf dem JSON-Format helfen kann und sichere und vertrauenswürdige Informationen liefert . Beim Erstellen des JWT-Tokens müssen wir die Nutzlast signieren. Dies bedeutet auch, dass wir beim Parsen des Tokens auf der Serverseite seine Legitimität überprüfen können.

Wir können die jwt-go-Bibliothek in der Go-Sprache verwenden, um die Authentifizierungsfunktion des JWT-Tokens zu implementieren. Die jwt-go-Bibliothek bietet eine einfache Möglichkeit, JWT-Token zu generieren, zu überprüfen und zu analysieren. JWT-Token besteht aus zwei Teilen: Header und Payload, getrennt durch Punkte.

Der Header enthält zwei Attribute: alg (Algorithmus) und typ (Typ). Der Algorithmus kann HMAC, RSA oder einige andere Verschlüsselungsalgorithmen verwenden, und der Typ bezieht sich auf den Typ des JWT-Tokens. Sein Wert im Standard ist JWT.

Die Nutzlast hat auch einige Attribute, aber diese Attribute sind keine Standardattribute, sondern benutzerdefinierte Attribute, die für die Kommunikation zwischen dem Server und dem Client verwendet werden.

Werfen wir nun einen Blick auf den konkreten Umsetzungsprozess.

Installieren Sie die abhängige Bibliothek

Bevor wir mit der Verwendung der jwt-go-Bibliothek beginnen, müssen wir sie zuerst installieren. Sie können sie mit dem folgenden Befehl installieren:

go get github.com/dgrijalva/jwt-go

Importieren Sie die abhängige Bibliothek

Importieren Sie die jwt-go-Bibliothek im Code:

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

JWT-Token generieren

Um ein JWT-Token in der Go-Sprache zu generieren, müssen wir die Nutzlast signieren. Der Signiervorgang erfordert die Verwendung eines Paares aus öffentlichem und privatem Schlüssel Legitimität des Tokens und der private Schlüssel wird zur Generierung des Tokens verwendet. Wir können den privaten Schlüssel in der Konfigurationsdatei oder Umgebungsvariablen speichern, um seine Sicherheit zu gewährleisten.

Das Folgende ist ein Beispiel für die Generierung eines JWT-Tokens:

// 生成JWT Token
func GenerateJwtToken() (string, error) {
    // 加载私钥
    privateKeyByte, err := ioutil.ReadFile("jwtRS256.key")
    if err != nil {
        return "", err
    }
    privateKey, err := jwt.ParseRSAPrivateKeyFromPEM(privateKeyByte)
    if err != nil {
        return "", err
    }
    // 设置Payload
    claims := jwt.MapClaims{
        "username": "admin",
        "exp":      time.Now().Add(time.Hour * 24).Unix(), // 过期时间
    }
    // 生成JWT Token
    token := jwt.NewWithClaims(jwt.SigningMethodRS256, claims)
    tokenString, err := token.SignedString(privateKey)
    if err != nil {
        return "", err
    }
    // 返回生成的Token
    return tokenString, nil
}

Im obigen Beispiel haben wir einen privaten Schlüssel geladen, dann die Nutzlast festgelegt, die Signatur des privaten Schlüssels zum Generieren eines JWT-Tokens verwendet und schließlich das JWT-Token zurückgegeben.

JWT-Token überprüfen

Um die Legitimität des JWT-Tokens in der Go-Sprache zu überprüfen, müssen wir zuerst die Nutzlast des Tokens analysieren und dann den öffentlichen Schlüssel verwenden, um das Token zu überprüfen.

Das Folgende ist ein Beispiel für die Überprüfung des JWT-Tokens:

// 验证JWT Token
func ParseJwtToken(tokenString string) (jwt.MapClaims, error) {
    // 加载公钥
    publicKeyByte, err := ioutil.ReadFile("jwtRS256.pem")
    if err != nil {
        return nil, err
    }
    publicKey, err := jwt.ParseRSAPublicKeyFromPEM(publicKeyByte)
    if err != nil {
        return nil, err
    }
    // 解析JWT Token
    token, err := jwt.Parse(tokenString, func(token *jwt.Token) (interface{}, error) {
        _, ok := token.Method.(*jwt.SigningMethodRSA)
        if !ok {
            return nil, fmt.Errorf("unexpected signing method: %v", token.Header["alg"])
        }
        return publicKey, nil
    })
    if err != nil {
        return nil, err
    }
    if claims, ok := token.Claims.(jwt.MapClaims); ok && token.Valid {
        return claims, nil
    }
    return nil, fmt.Errorf("invalid token")
}

Im obigen Beispiel haben wir einen öffentlichen Schlüssel geladen, dann ein JWT-Token analysiert, den öffentlichen Schlüssel verwendet, um die Legitimität des JWT-Tokens zu überprüfen, und schließlich die Nutzlast zurückgegeben .

Zusammenfassung

Die Verwendung der jwt-go-Bibliothek zur Implementierung der JWT-Token-Authentifizierung in der Go-Sprache ist eine einfache und effektive Möglichkeit. Als einfache Authentifizierungs- und Autorisierungsmethode kann JWT Token Informationen sicher zwischen dem Server und dem Client übertragen. Mithilfe der jwt-go-Bibliothek können Sie JWT-Token schnell generieren, überprüfen und analysieren und die Sicherheit während des Übertragungsprozesses gewährleisten.

Das obige ist der detaillierte Inhalt vonVerwendung der jwt-go-Bibliothek zur Implementierung der JWT-Token-Überprüfung und -Authentifizierung in der Go-Sprache. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn