> 백엔드 개발 > Golang > Iris용 기본 인증 미들웨어

Iris용 기본 인증 미들웨어

Barbara Streisand
풀어 주다: 2024-11-01 18:40:29
원래의
447명이 탐색했습니다.

Basic Authentication Middleware for Iris

개요

기본 인증 미들웨어는 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를 사용할 수 있습니다. 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 미들웨어를 사용한 테스트 핸들러

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:dev.to
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿