>  기사  >  백엔드 개발  >  Go 언어를 사용하여 구축된 마이크로서비스 신원 인증 및 권한 부여 시스템

Go 언어를 사용하여 구축된 마이크로서비스 신원 인증 및 권한 부여 시스템

王林
王林원래의
2023-08-10 17:43:461358검색

Go 언어를 사용하여 구축된 마이크로서비스 신원 인증 및 권한 부여 시스템

Go 언어를 사용하여 구축된 마이크로서비스 신원 인증 및 권한 부여 시스템

마이크로서비스 아키텍처의 등장으로 신원 인증 및 권한 부여 시스템은 분산 애플리케이션 구축에 없어서는 안 될 부분이 되었습니다. 이 기사에서는 Go 언어를 사용하여 간단하지만 강력한 마이크로서비스 인증 및 권한 부여 시스템을 구축하는 방법을 소개하고 코드 예제를 첨부합니다.

먼저 본인 인증 방법을 결정해야 합니다. 마이크로서비스 아키텍처에서 일반적인 ID 인증 방법에는 토큰 기반 인증과 JWT(JSON Web Token) 기반 인증이 포함됩니다. 이 예에서는 JWT 기반 인증을 사용합니다.

JWT를 생성하고 확인하려면 Go 언어로 된 타사 라이브러리를 사용할 수 있습니다. 여기서는 github.com/dgrijalva/jwt-go 라이브러리를 사용하기로 선택했습니다.

먼저 Go 프로그램에서 이 라이브러리를 가져와야 합니다.

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

다음으로 JWT 서명을 위한 키를 정의해야 합니다. 이 키는 JWT의 보안을 보장하는 데 사용되는 임의 문자열이어야 합니다. 실제 애플리케이션에서는 보안을 강화하기 위해 키를 환경 변수에 저장할 수 있습니다.

var signingKey = []byte("ThisIsASecretKey")

그런 다음 사용자의 신원 정보를 나타내는 구조를 정의해야 합니다. 이 예에서는 사용자 ID와 역할 정보만 저장합니다. 실제 필요에 따라 필요에 따라 더 많은 필드를 추가할 수 있습니다.

type User struct {
    ID     int64  `json:"id"`
    Role   string `json:"role"`
}

다음으로 JWT를 생성하는 함수를 구현해야 합니다. 이 함수는 사용자 개체를 매개변수로 받고 새 JWT 문자열을 반환합니다.

func GenerateToken(user User) (string, error) {
    claims := jwt.MapClaims{
        "id":   user.ID,
        "role": user.Role,
    }
    token := jwt.NewWithClaims(jwt.SigningMethodHS256, claims)
    return token.SignedString(signingKey)
}

그런 다음 JWT를 확인하는 기능을 구현해야 합니다. 이 함수는 JWT 문자열을 매개변수로 받고 구문 분석된 사용자 개체를 반환합니다.

func ValidateToken(tokenString string) (User, error) {
    token, err := jwt.Parse(tokenString, func(token *jwt.Token) (interface{}, error) {
        return signingKey, nil
    })
    if err != nil {
        return User{}, err
    }
    if claims, ok := token.Claims.(jwt.MapClaims); ok && token.Valid {
        return User{
            ID:   int64(claims["id"].(float64)),
            Role: claims["role"].(string),
        }, nil
    }
    return User{}, errors.New("Invalid token")
}

마지막으로 마이크로서비스에서 인증 및 승인을 위해 이러한 기능을 사용할 수 있습니다. 사용자가 로그인하면 JWT를 생성하여 사용자에게 반환할 수 있습니다. 사용자가 요청하면 JWT의 유효성을 검사하고 사용자의 역할 정보를 확인하여 액세스 권한이 있는지 확인할 수 있습니다.

func LoginHandler(w http.ResponseWriter, r *http.Request) {
    // 验证用户身份...
    // 生成JWT
    token, _ := GenerateToken(user)
    // 将JWT返回给用户
    w.Write([]byte(token))
}

func SecureHandler(w http.ResponseWriter, r *http.Request) {
    // 验证JWT
    tokenString := r.Header.Get("Authorization")
    user, err := ValidateToken(tokenString)
    if err != nil {
        w.WriteHeader(http.StatusUnauthorized)
        w.Write([]byte("Unauthorized"))
        return
    }
    // 检查用户角色...
    // 处理请求...
    w.Write([]byte("Authorized"))
}

위의 예를 통해 Go 언어를 사용하여 간단하지만 강력한 마이크로서비스 인증 및 권한 부여 시스템을 구축하는 방법을 확인할 수 있습니다. 물론 실제 애플리케이션에서는 새로 고침 토큰, Single Sign-On 등과 같은 더 많은 기능을 추가해야 할 수도 있습니다. 그러나 그것이 단순하든 복잡한 애플리케이션 시나리오이든 Go 언어와 풍부한 타사 라이브러리의 강력한 기능은 안전하고 신뢰할 수 있는 신원 인증 및 권한 부여 시스템을 구축하는 데 도움이 될 수 있습니다.

위 내용은 Go 언어를 사용하여 구축된 마이크로서비스 신원 인증 및 권한 부여 시스템의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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