>  기사  >  백엔드 개발  >  Golang 학습 웹 서버 인증 및 권한 부여

Golang 학습 웹 서버 인증 및 권한 부여

PHPz
PHPz원래의
2023-06-24 09:04:051155검색

Golang은 새롭게 떠오르는 언어로, 특히 웹 서비스 구현에 적합합니다. 웹 서비스에서 인증과 권한 부여는 매우 중요한 보안 메커니즘입니다. 이 기사에서는 Golang에서 웹 서버 인증 및 권한 부여를 구현하는 방법을 소개합니다.

인증(Authentication)이란 사용자의 신원을 확인하고 리소스에 액세스할 수 있는 권한이 있는지 확인하는 것을 말합니다. 일반적인 인증 방법에는 사용자 이름, 비밀번호, 토큰 등이 포함됩니다. 권한 부여는 사용자에게 리소스에 액세스할 수 있는 권한이 있는지 여부를 결정하는 것을 의미합니다. 일반적으로 역할 기반 액세스 제어 및 리소스 기반 액세스 제어 인증 방법이 포함됩니다.

Golang에서는 다양한 프레임워크와 라이브러리를 사용하여 웹 서비스의 인증 및 승인을 구현할 수 있습니다. 이 기사에서는 Gin 프레임워크를 예로 들어 토큰 기반 인증 및 역할 기반 권한 부여를 구현하는 방법을 소개합니다.

1. 토큰 기반 인증

Gin 프레임워크에서는 JWT(Json Web Token)를 사용하여 토큰 기반 인증을 구현할 수 있습니다. JWT는 웹을 통해 정보를 안전하게 전송하는 간결하고 독립적인 방법을 정의하는 개방형 표준입니다. JWT는 헤더, 페이로드, 서명의 세 부분으로 구성됩니다.

헤더는 토큰 유형과 서명 알고리즘을 설명하는 데 사용됩니다. 예:

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

페이로드는 다음과 같은 정보를 저장하는 데 사용됩니다. 사용자 이름, 역할 등을 전송해야 합니다. 예:

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

서명은 다음과 같이 사용됩니다. 정보가 변조되는 것을 방지하며 서명에는 개인 키가 필요합니다. 예:

base64UrlEncode(header) + "." +

base64UrlEncode(payload),
secret)

Golang에서는 다음을 사용할 수 있습니다. JWT 생성 및 검증을 달성하기 위한 github.com/dgrijalva/jwt-go 라이브러리. 예:

// 서명 방법과 포함할 클레임을 지정하여 새 토큰 개체를 만듭니다.

token := jwt.NewWithClaims(jwt.SigningMethodHS256, jwt.MapClaims{

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

})

/ / 서명하고 secret

tokenString, err := token.SignedString([]byte("secret"))


// 토큰을 구문 분석하여 유효성을 확인하고 클레임

토큰을 추출하여 문자열로 전체 인코딩된 토큰을 가져옵니다. , err := jwt.ParseWithClaims(tokenString, &MyCustomClaims{}, func(token *jwt.Token) (interface{}, error) {

return []byte("secret"), nil

})

Gin 프레임워크에서는 gin-jwt 라이브러리를 사용할 수 있습니다. JWT 기반 인증 메커니즘을 신속하게 구축합니다. 예:

// 지정된 서명 키를 사용하여 새 JWT 미들웨어 생성

middleware := jwtmiddleware.New(jwtmiddleware.Options{

SigningMethod:   jwt.SigningMethodHS256,
Claims:          &CustomClaims{},
KeyFunc: func(token *jwt.Token) (interface{}, error) {
    // Check the signing method and return the key for verifying the signature
    if _, ok := token.Method.(*jwt.SigningMethodHMAC); !ok {
        return nil, fmt.Errorf("unexpected signing method: %v", token.Header["alg"])
    }
    return []byte("secret"), nil
},

})

// Gin 경로에서 미들웨어를 사용하여 리소스 보호

router .GET("/protected", middleware.MiddlewareFunc(), func(c *gin.Context) {

claims := jwtmiddleware.ExtractClaims(c)
user := claims["user"].(string)
c.JSON(200, gin.H{
    "user": user,
    "message": "Hello, World!",
})

})

2. 역할 기반 인증

Gin 프레임워크에서는 역할 기반을 사용할 수 있습니다. 리소스에 대한 사용자 액세스를 제한하는 권한. 예를 들어, 블로그 애플리케이션에서는 일반 사용자와 관리자를 구별하기 위해 역할이 사용됩니다. 관리자는 모든 블로그 리소스에 액세스할 수 있지만 일반 사용자는 자신이 게시한 블로그 리소스에만 액세스할 수 있습니다.

gin-authz 라이브러리를 사용하여 역할 기반 인증을 구현할 수 있습니다. 예:

// 역할 기반 액세스를 적용하기 위한 인증 미들웨어 정의

authMiddleware := authz.NewAuthorizer(authz.BuiltinRolebased())


// "관리자" 역할 액세스 권한을 부여하는 역할 기반 정책 정의 모든 리소스에

adminRole := authz.NewRole("admin", []string{"*"})

policy := authz.NewPolicy()
policy.AddRole(adminRole)

// 역할 기반 액세스 제어를 시행하기 위한 Gin 경로

router.GET("/blogs", authMiddleware.CheckPermission(policy, "admin"), func(c *gin.Context) {

// Return the list of all blogs

})

router.GET ( "/blog/:id", authMiddleware.CheckPermission(policy, "read"), func(c *gin.Context) {

// Return the specified blog

})

router.POST("/blog", authMiddleware.CheckPermission(policy , "write"), func(c *gin.Context) {

// Create a new blog

})

위 코드에서는 모든 리소스("*") 권한에 액세스할 수 있는 "admin"이라는 역할이 정의되었습니다. 그런 다음 각 경로에서 authMiddleware.CheckPermission 함수를 사용하여 사용자의 역할에 리소스에 대한 액세스 권한이 있는지 확인합니다.

요약

이 글에서는 Golang에서 웹 서버 인증 및 권한 부여를 구현하는 방법을 소개합니다. Gin 프레임워크와 관련 라이브러리를 사용하여 안전하고 안정적인 웹 서비스를 빠르게 구축할 수 있습니다.

위 내용은 Golang 학습 웹 서버 인증 및 권한 부여의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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