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"))
// 토큰을 구문 분석하여 유효성을 확인하고 클레임
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())
// "관리자" 역할 액세스 권한을 부여하는 역할 기반 정책 정의 모든 리소스에
policy := authz.NewPolicy()
policy.AddRole(adminRole)
// 역할 기반 액세스 제어를 시행하기 위한 Gin 경로
// 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!