>백엔드 개발 >Golang >JWT를 사용하여 Golang 프로젝트에서 OAuth2.0 인증을 구현하는 방법

JWT를 사용하여 Golang 프로젝트에서 OAuth2.0 인증을 구현하는 방법

王林
王林원래의
2023-06-04 12:10:341248검색

인터넷의 급속한 발전으로 인해 점점 더 많은 애플리케이션에서 사용자 인증 및 권한 부여를 구현해야 합니다. 가장 널리 사용되는 인증 프레임워크 중 하나인 OAuth2.0은 웹 및 모바일 애플리케이션에서 널리 사용됩니다. JWT(JSON Web Token)는 개발자가 클라이언트와 서버 간에 정보를 안전하게 전송할 수 있도록 널리 사용되는 인증 표준입니다. JWT를 사용하여 Golang 프로젝트에서 OAuth2.0 인증을 구현하는 것은 매우 간단합니다. 아래에서는 구현 방법을 소개합니다.

  1. JWT 라이브러리 설치

JWT를 사용하기 전에 Golang 아래에 jwt-go 라이브러리를 설치해야 합니다. 다음 명령을 사용하여 설치를 완료합니다.

go get github.com/dgrijalva/jwt-go
  1. JWT 인증 프로세스

JWT를 사용하여 OAuth2.0 인증을 구현하는 방법을 소개하기 전에 먼저 JWT의 기본 개념과 작동 원리를 숙지해 보겠습니다. 표준 인증 방법으로 JWT는 다음과 같은 특징을 가지고 있습니다.

  • 헤더, 페이로드, 서명의 세 부분으로 구성됩니다.
  • 인코딩 방법은 Base64Url 인코딩입니다.
  • 크로스 도메인 환경에서 사용할 수 있습니다. 안전한 인증을 위한 인증 프로세스 데이터 전송

JWT는 다음과 같습니다.

  • 클라이언트가 요청을 보냅니다
  • 서버는 클라이언트가 요청한 정보를 확인하고 JWT 토큰을 생성하여 클라이언트에 반환합니다
  • 클라이언트가 JWT 토큰을 보냅니다. 로컬에서는 요청이 전송될 때마다 JWT 토큰이 Authorization 헤더로 서버에 전송됩니다.
  • 서버는 요청을 수신하고 JWT 토큰이 유효한지 확인하고 유효한 경우 요청 결과를 반환하고 그렇지 않으면 오류를 반환합니다. message
  1. JWT 인증 구현

Golang 프로젝트에서 JWT를 사용하여 OAuth2.0 인증을 구현하려면 다음 단계를 완료해야 합니다.

  • JWT 토큰 만들기
  • JWT 토큰 확인

방법을 소개하겠습니다. 아래에서 차례로 수행하십시오.

3.1 JWT 토큰 만들기

서버 측에서 JWT 토큰을 생성할 때 키, 페이로드 정보(Claims) 및 만료 시간(ExpiresAt)의 세 가지 매개변수를 설정해야 합니다.

다음 코드를 사용하여 JWT 토큰을 만듭니다.

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

func CreateJWT() (string, error) {
    // 设置密钥
    secret := []byte("secret")

    // 设置载荷信息
    token := jwt.New(jwt.SigningMethodHS256)
    claims := token.Claims.(jwt.MapClaims)
    claims["authorized"] = true
    claims["user_id"] = 1
    claims["exp"] = time.Now().Add(time.Minute * 30).Unix()

    // 创建JWT令牌
    tokenString, err := token.SignedString(secret)
    if err != nil {
        return "", err
    }

    return tokenString, nil
}

위 코드에서는 키를 "secret"으로 설정했으며 페이로드 정보에는 사용자 인증 상태, 사용자 ID 및 만료 시간이 포함됩니다. 마지막으로 token.SignedString 메서드를 사용하여 JWT 토큰을 만듭니다.

3.2 JWT 토큰 확인

클라이언트가 요청을 보낼 때 JWT 토큰은 로컬에 저장되어 각 요청의 Authorization 헤더로 서버에 전송되어야 합니다. 요청을 받은 후 서버는 JWT 토큰의 유효성을 확인해야 합니다.

JWT 토큰은 다음 코드를 사용하여 확인할 수 있습니다.

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

func VerifyJWT(tokenString string) (jwt.MapClaims, error) {
    // 设置密钥
    secret := []byte("secret")

    // 解析JWT令牌
    token, err := jwt.Parse(tokenString, 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 secret, nil
    })

    if err != nil {
        return nil, err
    }

    // 校验JWT令牌
    if claims, ok := token.Claims.(jwt.MapClaims); ok && token.Valid {
        return claims, nil
    }

    return nil, fmt.Errorf("invalid token")
}

위 코드에서는 비밀을 "secret"으로 설정하고 jwt.Parse 메서드를 사용하여 JWT 토큰을 구문 분석한 후 token.Claims를 사용합니다.(jwt .MapClaims) 페이로드 정보를 MapClaims 유형으로 변환합니다. 마지막으로 JWT 토큰이 유효한지 확인합니다.

  1. 결론

JWT를 사용하여 Golang 프로젝트에서 OAuth2.0 인증을 구현하는 것은 매우 간단합니다. 위의 두 단계만 완료하면 됩니다. 표준 인증 방법인 JWT는 뛰어난 도메인 간 성능과 보안을 갖추고 있어 효율적이고 안전하며 편리한 인증 방법을 제공하여 개발 효율성과 사용자 경험을 크게 향상시킵니다.

위 내용은 JWT를 사용하여 Golang 프로젝트에서 OAuth2.0 인증을 구현하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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