기본 인증 미들웨어는 Iris 웹 애플리케이션을 보호하는 강력하고 유연한 방법을 제공합니다. 인메모리 목록, 파일, 데이터베이스 등 다양한 사용자 저장 방식을 지원하며 비밀번호 암호화, 사용자 정의 오류 처리, 세션 만료 등의 고급 기능을 제공합니다.
basicauth 미들웨어를 사용하려면 Iris 애플리케이션에서 이를 가져와야 합니다.
import "github.com/kataras/iris/v12/middleware/basicauth"
미들웨어의 핵심은 다음과 같은 시그니처를 갖는 기능인 Allow 필드입니다.
func(ctx iris.Context, username, password string) (any, bool)
이 기능은 사용자 이름과 비밀번호를 확인하는 역할을 합니다. 사용자 개체(또는 다른 유형)와 인증 성공 여부를 나타내는 부울을 반환합니다.
미들웨어는 특별한 사용자 구조를 요구하지 않지만, 헬퍼 구조를 이용하면 사용자 데이터를 보다 편리하게 관리할 수 있습니다. 다음은 사용자 구조의 예입니다.
type User struct { Username string `json:"username"` Password string `json:"password"` Roles []string `json:"roles"` }
사용자 구조 조각을 사용하여 사용자를 메모리에 저장할 수 있습니다. 이는 소규모 애플리케이션이나 테스트 목적에 유용합니다.
var users = []User{ {"admin", "admin", []string{"admin"}}, {"kataras", "kataras_pass", []string{"manager", "author"}}, {"george", "george_pass", []string{"member"}}, {"john", "john_pass", []string{}}, }
미들웨어를 설정하려면 basicauth.Options의 인스턴스를 생성하고 이를 basicauth.New에 전달합니다.
opts := basicauth.Options{ Realm: basicauth.DefaultRealm, MaxAge: 10 * time.Minute, GC: basicauth.GC{ Every: 2 * time.Hour, }, Allow: basicauth.AllowUsers(users), } auth := basicauth.New(opts)
파일(JSON 또는 YAML)에서 사용자를 로드할 수 있습니다. 이는 사용자 데이터가 자주 변경되는 애플리케이션에 유용합니다.
auth := basicauth.Load("users.yml")
BCRYPT 옵션을 사용하면 비밀번호 해싱에 bcrypt를 사용할 수 있습니다. Bcrypt는 무차별 대입 공격에 저항하기 위해 계산 집약적으로 설계된 비밀번호 해싱 기능입니다. 비밀번호를 안전하게 저장하기 위해 널리 사용됩니다.
auth := basicauth.Load("users.yml", basicauth.BCRYPT)
인 메모리나 데이터베이스 저장소 등 다른 사용자 가져오기 방법과 함께 BCRYPT 옵션을 사용할 수도 있습니다.
보다 동적인 사용자 관리를 위해 데이터베이스를 기준으로 사용자의 유효성을 검사할 수 있습니다. 다음은 MySQL 데이터베이스를 사용하여 미들웨어를 설정하는 방법의 예입니다.
package main import ( "context" "database/sql" "fmt" "os" "github.com/kataras/iris/v12" "github.com/kataras/iris/v12/middleware/basicauth" _ "github.com/go-sql-driver/mysql" ) type User struct { ID int64 `db:"id" json:"id"` Username string `db:"username" json:"username"` Password string `db:"password" json:"password"` Email string `db:"email" json:"email"` } func (u User) GetUsername() string { return u.Username } func (u User) GetPassword() string { return u.Password } func main() { dsn := fmt.Sprintf("%s:%s@tcp(%s:3306)/%s?parseTime=true&charset=utf8mb4&collation=utf8mb4_unicode_ci", getenv("MYSQL_USER", "user_myapp"), getenv("MYSQL_PASSWORD", "dbpassword"), get env("MYSQL_HOST", "localhost"), getenv("MYSQL_DATABASE", "myapp"), ) db, err := connect(dsn) if err != nil { panic(err) } // Validate a user from database. allowFunc := func(ctx iris.Context, username, password string) (any, bool) { user, err := db.getUserByUsernameAndPassword(context.Background(), username, password) return user, err == nil } opts := basicauth.Options{ Realm: basicauth.DefaultRealm, ErrorHandler: basicauth.DefaultErrorHandler, Allow: allowFunc, } auth := basicauth.New(opts) app := iris.New() app.Use(auth) app.Get("/", index) app.Listen(":8080") } func index(ctx iris.Context) { user, _ := ctx.User().GetRaw() // user is a type of main.User ctx.JSON(user) }
basicauth.Options에서 ErrorHandler 필드를 설정하여 오류 처리 동작을 사용자 정의할 수 있습니다.
opts := basicauth.Options{ ErrorHandler: func(ctx iris.Context, err error) { ctx.StatusCode(iris.StatusUnauthorized) ctx.JSON(iris.Map{"error": "Unauthorized"}) }, }
미들웨어는 세션 만료를 지원합니다. MaxAge 필드를 설정하여 사용자가 재인증해야 하는 기간을 지정할 수 있습니다.
opts := basicauth.Options{ MaxAge: 10 * time.Minute, }
만료된 사용자를 메모리에서 삭제하려면 GC 필드를 설정하세요.
import "github.com/kataras/iris/v12/middleware/basicauth"
BasicAuth 미들웨어를 사용하는 핸들러를 테스트하려면
http테스트
아이리스에서 제공하는 패키지입니다. 다음은 핸들러를 테스트하는 방법의 예입니다.
func(ctx iris.Context, username, password string) (any, bool)
다음은 인메모리 사용자 스토리지로 미들웨어를 설정하는 방법을 보여주는 전체 예입니다.
type User struct { Username string `json:"username"` Password string `json:"password"` Roles []string `json:"roles"` }
기본 인증 미들웨어는 Iris 웹 애플리케이션 보안을 위한 포괄적인 솔루션을 제공합니다. 다양한 사용자 저장 방법 지원, 비밀번호 암호화 및 사용자 정의 오류 처리와 같은 고급 기능, 손쉬운 통합을 갖춘 개발자를 위한 강력한 도구입니다.
위 내용은 Iris용 기본 인증 미들웨어의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!