Componentes de engenharia Golang: programação de middleware e autenticação jwt de framework web de alto desempenho

Como uma linguagem de programação rápida e eficiente, Golang pode melhorar o desempenho e a eficiência ao desenvolver aplicativos da web. Gin é uma estrutura da web de alto desempenho, e suas funções de programação de middleware e autenticação jwt podem ajudar os desenvolvedores a desenvolver aplicativos de maneira mais conveniente.

1. Programação de middleware

No gin, um middleware é um componente modular conectável, semelhante a um interceptor ou filtro. Usando middleware, podemos implementar funções como registro, verificação de autorização e limitação de corrente.

  1. definição de middleware

No framework gin, o middleware é implementado definindo funções:

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

O código acima define um middleware chamado MyMiddleware e retorna um tipo de função. Este tipo de função aceita um parâmetro c *gin.Context, representando o objeto de contexto de solicitação HTTP. Código lógico arbitrário pode ser escrito dentro desta função.

  1. registro de middleware

Quando o aplicativo é iniciado, o middleware precisa ser registrado com a rota correspondente:

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

O código acima registra MyMiddleware na rota padrão, indicando que todas as solicitações HTTP que passam pela rota serão processadas pelo middleware.

2. Autenticação JWT

JWT (Json Web Token) é um protocolo leve de transmissão segura baseado em JSON, geralmente usado para autenticação de identidade e transmissão de informações. Na estrutura do gin, podemos usar o JWT para implementar a autenticação de identidade.

  1. Geração JWT

No aplicativo, as informações de identidade do usuário precisam ser codificadas em um JWT e retornadas ao 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"))
}

O código acima define a função GenerateToken, aceita um parâmetro de tipo User e codifica seu ID e Email como carga útil em um JWT. Por fim, use o algoritmo HS256 para assinar e retornar a string JWT.

  1. verificação JWT

Na rota que requer autenticação, precisamos obter o JWT analisando o campo Authorization do cabeçalho da requisição HTTP e verificar:

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: 处理逻辑
    }
}

O código acima define um middleware chamado AuthMiddleware, que é usado para verificar o JWT e obter as informações de ID do usuário nele. Se o JWT for inválido ou expirado, uma mensagem de erro correspondente será retornada.

Resumir:

O texto acima é um artigo de 3.000 palavras sobre componentes de engenharia golang: programação de middleware gin de estrutura da web de alto desempenho e autenticação jwt. Espero que seja útil para todos. Ao desenvolver aplicativos da Web, o middleware e a autenticação de identidade são partes essenciais, o que pode fazer com que os desenvolvedores desenvolvam aplicativos de maneira mais conveniente e garantam a segurança e a estabilidade dos programas.

Acho que você gosta

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