Olá, Rinaldo. Tudo bem?
Muito bom saber que você está gostando dos cursos de Golang! Sobre a sua dúvida, a implementação de autenticação e autorização usando JWT (JSON Web Tokens) é realmente um tópico essencial para o desenvolvimento de APIs seguras.
Para implementar isso em uma API usando Go e Gin, você pode seguir os passos abaixo como um ponto de partida:
- Criação do Token JWT: Após o login do usuário, você deve gerar um token JWT. Para isso, você pode usar uma biblioteca como o - github.com/dgrijalva/jwt-go. Ao criar o token, inclua informações relevantes no payload, como o ID do usuário e o tempo de expiração.
 - import (
    "github.com/dgrijalva/jwt-go"
    "time"
)
func GenerateJWT(userID string) (string, error) {
    token := jwt.NewWithClaims(jwt.SigningMethodHS256, jwt.MapClaims{
        "user_id": userID,
        "exp":     time.Now().Add(time.Hour * 72).Unix(),
    })
    tokenString, err := token.SignedString([]byte("secret"))
    if err != nil {
        return "", err
    }
    return tokenString, nil
}
 
- Autenticação do Usuário: No endpoint de login, autentique o usuário com suas credenciais e, em seguida, gere o token JWT usando a função acima. 
- Autorização com o Token JWT: Para proteger suas rotas, crie um middleware que verifica se o token JWT está presente no header da requisição e se é válido. - import (
    "github.com/gin-gonic/gin"
    "github.com/dgrijalva/jwt-go"
    "net/http"
)
func AuthMiddleware() gin.HandlerFunc {
    return func(c *gin.Context) {
        tokenString := c.GetHeader("Authorization")
        if tokenString == "" {
            c.AbortWithStatusJSON(http.StatusUnauthorized, gin.H{"error": "request does not contain an access token"})
            return
        }
        token, err := jwt.Parse(tokenString, func(token *jwt.Token) (interface{}, error) {
            return []byte("secret"), nil
        })
        if claims, ok := token.Claims.(jwt.MapClaims); ok && token.Valid {
            c.Set("userID", claims["user_id"])
            c.Next()
        } else {
            c.AbortWithStatusJSON(http.StatusUnauthorized, gin.H{"error": err.Error()})
        }
    }
}
 
- Protegendo Rotas: Use o middleware nas rotas que precisam de proteção. - r := gin.Default()
r.Use(AuthMiddleware())
r.GET("/protected", func(c *gin.Context) {
    userID := c.MustGet("userID").(string)
    c.JSON(http.StatusOK, gin.H{"user_id": userID})
})
 
Esses são passos básicos para começar com autenticação e autorização usando JWT em uma API REST com Go e Gin. Espero que isso ajude a complementar seus estudos, dar uma visão. 
Seu feedback será encaminhado para a equipe de conteúdo. Quiser sugerir um curso específico, temos esse link de sugestão de conteúdos: Sugerir-conteúdo-e-cursos
Espero ter ajudado e bons estudos!
Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓.Bons Estudos!