Componentes de ingeniería de Golang: programación de middleware y autenticación jwt de gin de framework web de alto rendimiento

Como lenguaje de programación rápido y eficiente, Golang puede mejorar el rendimiento y la eficiencia al desarrollar aplicaciones web. Gin es un marco web de alto rendimiento, y su programación de middleware y funciones de autenticación jwt pueden ayudar a los desarrolladores a desarrollar aplicaciones de manera más conveniente.

1. Programación de software intermedio

En gin, un middleware es un componente modular conectable, similar a un interceptor o filtro. Mediante el uso de middleware, podemos implementar funciones como registro, verificación de autorización y limitación de corriente.

  1. definición de software intermedio

En el framework gin, el middleware se implementa definiendo funciones:

func MyMiddleware() gin.HandlerFunc {
    return func(c *gin.Context) {
        // TODO: 中间件逻辑
    }
}

El código anterior define un middleware llamado MyMiddleware y devuelve un tipo de función. Este tipo de función acepta un parámetro c *gin.Context, que representa el objeto de contexto de la solicitud HTTP. El código de lógica arbitraria se puede escribir dentro de esta función.

  1. registro de software intermedio

Cuando se inicia la aplicación, el middleware debe registrarse con la ruta correspondiente:

r := gin.Default()
r.Use(MyMiddleware())

El código anterior registra MyMiddleware en la ruta predeterminada, lo que indica que el middleware procesará todas las solicitudes HTTP que pasen por la ruta.

2. Autenticación JWT

JWT (Json Web Token) es un protocolo de transmisión seguro ligero basado en JSON, generalmente utilizado para la autenticación de identidad y la transmisión de información. En el marco de gin, podemos usar JWT para implementar la autenticación de identidad.

  1. generación JWT

En la aplicación, la información de identidad del usuario debe codificarse en un JWT y devolverse al cliente:

func GenerateToken(user *models.User) (string, error) {
    claims := jwt.MapClaims{
        "id":    user.ID,
        "email": user.Email,
    }

    token := jwt.NewWithClaims(jwt.SigningMethodHS256, claims)

    return token.SignedString([]byte("secret"))
}

El código anterior define la función GenerateToken, acepta un parámetro de tipo de usuario y codifica su ID y correo electrónico como carga útil en un JWT. Finalmente, use el algoritmo HS256 para firmar y devolver la cadena JWT.

  1. Verificación JWT

En la ruta que requiere autenticación, debemos obtener el JWT analizando el campo Autorización del encabezado de la solicitud HTTP y verificarlo:

func AuthMiddleware() gin.HandlerFunc {
    return func(c *gin.Context) {
        authHeader := c.GetHeader("Authorization")
        if len(authHeader) == 0 {
            c.JSON(http.StatusUnauthorized, gin.H{"error": "missing authorization header"})
            c.Abort()
            return
        }

        tokenStr := strings.Replace(authHeader, "Bearer ", "", 1)
        token, err := jwt.Parse(tokenStr, 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("secret"), nil
        })

        if err != nil || !token.Valid {
            c.JSON(http.StatusUnauthorized, gin.H{"error": "invalid or expired token"})
            c.Abort()
            return
        }

        claims, ok := token.Claims.(jwt.MapClaims)
        if !ok {
            c.JSON(http.StatusInternalServerError, gin.H{"error": "invalid token claims"})
            c.Abort()
            return
        }

        userID := int(claims["id"].(float64))
        
        // TODO: 处理逻辑
    }
}

El código anterior define un middleware llamado AuthMiddleware, que se usa para verificar el JWT y obtener la información de ID de usuario en él. Si el JWT no es válido o ha caducado, se devolverá el mensaje de error correspondiente.

Resumir:

El anterior es un artículo de 3000 palabras sobre los componentes de ingeniería de golang: marco web de alto rendimiento, programación de middleware gin y autenticación jwt. Espero que sea útil para todos. Al desarrollar aplicaciones web, el middleware y la autenticación de identidad son partes esenciales, lo que puede hacer que los desarrolladores desarrollen aplicaciones de manera más conveniente y garantizar la seguridad y estabilidad de los programas.

Supongo que te gusta

Origin blog.csdn.net/SMILY12138/article/details/130885140
Recomendado
Clasificación