>백엔드 개발 >Golang >Go 언어 서버 프로그래밍 실습: JWT를 사용하여 API 인터페이스 보호

Go 언어 서버 프로그래밍 실습: JWT를 사용하여 API 인터페이스 보호

WBOY
WBOY원래의
2023-06-18 16:55:281147검색

오늘날의 인터넷 시대에 웹 애플리케이션의 인기와 함께 API(Application Programing Interface, 애플리케이션 프로그래밍 인터페이스)에 대한 개발자의 관심과 의존도가 높아지고 있습니다. 그리고 API 인터페이스의 보안을 보호하는 것은 매우 중요한 문제입니다. 이 기사에서는 Go 언어를 예로 들어 JWT(JSON 웹 토큰)를 사용하여 API 인터페이스의 보안을 보호하는 방법을 소개합니다.

1. JWT란

JWT의 정식 이름은 JSON Web Token으로, 당사자 간에 보안 정보를 전송하는 데 사용되는 개방형 표준(RFC 7519)입니다. JWT는 정보를 인증, 승인 및 교환할 수 있습니다. JWT는 일반적으로 웹 애플리케이션이나 API에서 인증 정보를 전달하는 데 사용됩니다.

JWT에서는 헤더, 페이로드, 서명의 세 부분으로 구성됩니다.

  1. 헤더

헤더는 일반적으로 토큰 유형(예: JWT)과 알고리즘 이름(예: HMAC SHA256 또는 RSA)의 두 부분으로 구성됩니다.

{
"alg": "HS256",
"typ": "JWT"
}

  1. Payload

페이로드에는 사용자 ID나 액세스 권한과 같은 신뢰할 수 있고 유용한 정보가 포함되어 있습니다. 페이로드에 사용자 지정 클레임을 추가할 수 있습니다(등록된 클레임 이름만 사용하는 것이 좋습니다).

{
"sub": "1234567890",
"name": "John Doe",
"iat": 1516239022
}

  1. Signature(서명)

JWT가 진짜인지 확인하고 유효하다면 헤더에 지정된 알고리즘과 키를 사용하여 JWT에 서명하는 비밀을 사용해야 합니다.

hmacsha256 (
base64urlencode (header) + "." +
base64urlencode (페이로드),
your-256-bit-secret
)

second는 JWT를 사용하여 API 인터페이스 JWT 종속성을 보호합니다. 먼저 Go 언어의 JWT 종속성 패키지를 설치해야 합니다.

    go get github.com/dgrijalva/jwt-go
JWT 생성 및 확인

JWT를 사용하여 API 인터페이스를 보호하는 경우 JWT를 확인하세요. 다음은 JWT를 생성하고 확인하는 간단한 예제 코드입니다.

    Generate JWT
  1. func GenerateToken(userid string) (string, error) {
token := jwt.NewWithClaims(jwt.SigningMethodHS256, jwt.MapClaims{
    "userid": userid,
    "exp":   time.Now().Add(time.Hour * 24 * 7).Unix(), //有效期一周
})
tokenString, err := token.SignedString([]byte("mysecretkey"))
if err != nil {
    return "", err
}
return tokenString, nil

}

Verify JWT

func ValidateToken(tokenString string) ( bool, string ) {

token, err := jwt.Parse(tokenString, func(token *jwt.Token) (interface{}, error) {
    return []byte("mysecretkey"), nil
})
if err == nil && token.Valid {
    claims := token.Claims.(jwt.MapClaims)
    userid := claims["userid"].(string) //取出userid
    return true, userid
} else {
    return false, ""
}

}

API 인터페이스에서 JWT 확인 메커니즘 사용

API 인터페이스에서는 먼저 HTTP 요청에서 JWT를 읽고 확인해야 합니다. 확인이 통과되면 API 인터페이스에 대한 액세스가 허용되고, 그렇지 않으면 403 오류(권한 없음)가 반환됩니다.

    다음은 샘플 코드입니다.
  1. func myAPIHandler(w http.ResponseWriter, r *http.Request) {
tokenString := r.Header.Get("Authorization") //从HTTP请求中获取JWT
if tokenString == "" {
    w.WriteHeader(http.StatusForbidden)
    return
}
tokenString = strings.TrimPrefix(tokenString, "Bearer ")
ok, userid := ValidateToken(tokenString) //校验JWT
if !ok {
    w.WriteHeader(http.StatusForbidden)
    return
}
// 对于登录用户,可以从JWT中获取用户信息(例如userid),并进行权限控制
// ...
// 处理API请求
// ...

}

3. 요약

JWT를 사용하면 API 인터페이스의 보안을 효과적으로 보호하고 승인된 사용자만 API 인터페이스에 액세스할 수 있습니다. Go 언어에서는 JWT를 사용하는 것도 매우 간단합니다. 종속성 패키지를 설치하고 해당 코드를 작성하기만 하면 됩니다. 동시에 API 인터페이스의 보안을 보호하기 위해 HTTPS 암호화, 방화벽 설정, 로그 모니터링 등과 같은 다른 보안 조치도 필요합니다.

위 내용은 Go 언어 서버 프로그래밍 실습: JWT를 사용하여 API 인터페이스 보호의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.