[go] Go 언어와 JWT 인증

인증은 현대 웹 애플리케이션에서 핵심적인 보안 요소 중 하나입니다. 여러 가지 인증 방법 중 하나인 JWT(JSON Web Token)은 Go 언어로 구현할 수 있는 강력한 인증 방법입니다. 이번 글에서는 Go 언어와 JWT를 사용한 인증에 대해 알아보겠습니다.

JWT란?

JWT는 클라이언트와 서버 간의 정보 교환을 위한 인증 방법 중 하나입니다. JWT는 안전한 방식으로 사용자의 정보를 전송할 수 있도록 하며, 이를 통해 신뢰할 수 있는 인증을 구현할 수 있습니다. JWT는 토큰의 형태로 정보를 인코딩하여 전달하며, 이 토큰에는 클라이언트의 신원을 확인하기 위한 정보가 포함됩니다.

Go 언어에서 JWT 사용하기

Go 언어에서 JWT를 사용하기 위해서는 먼저 github.com/dgrijalva/jwt-go와 같은 JWT 라이브러리를 설치해야 합니다. 아래 명령어를 사용하여 라이브러리를 설치할 수 있습니다.

go get github.com/dgrijalva/jwt-go

이제 JWT를 사용하여 인증을 구현해보겠습니다. 먼저, 토큰을 생성하는 함수를 작성해보겠습니다.

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

func GenerateToken(userID string) (string, error) {
    token := jwt.New(jwt.SigningMethodHS256)
    claims := token.Claims.(jwt.MapClaims)
    claims["userID"] = userID
    key := []byte("secretKey")
    tokenString, err := token.SignedString(key)
    if err != nil {
        return "", err
    }
    return tokenString, nil
}

위 코드에서는 GenerateToken 함수를 사용하여 userID를 입력받고, 해당 userID를 JWT의 payload에 저장한 후, 토큰을 생성합니다.

이제 생성된 토큰을 검증하는 함수를 작성해보겠습니다.

func VerifyToken(tokenString string) (string, error) {
    token, err := jwt.Parse(tokenString, func(token *jwt.Token) (interface{}, error) {
        return []byte("secretKey"), nil
    })
    if err != nil {
        return "", err
    }
    claims, ok := token.Claims.(jwt.MapClaims)
    if !ok || !token.Valid {
        return "", errors.New("invalid token")
    }
    userID := claims["userID"].(string)
    return userID, nil
}

위 코드에서는 VerifyToken 함수를 사용하여 토큰을 검증합니다. 토큰을 검증하기 위해서는 생성할 때 사용되었던 키를 사용해야 합니다.

결론

Go 언어와 JWT를 사용하여 인증을 구현하는 방법에 대해 알아보았습니다. JWT를 사용하면 클라이언트와 서버 간의 신뢰성 있는 인증을 쉽고 안전하게 구현할 수 있습니다. Go 언어의 강력한 기능과 JWT를 결합하여 웹 애플리케이션의 보안을 강화해보세요.