Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Perisian Tengah Pengesahan Asas untuk Iris

Perisian Tengah Pengesahan Asas untuk Iris

Barbara Streisand
Barbara Streisandasal
2024-11-01 18:40:29318semak imbas

Basic Authentication Middleware for Iris

Gambaran keseluruhan

Perisian tengah Pengesahan Asas menyediakan cara yang teguh dan fleksibel untuk melindungi aplikasi web Iris anda. Ia menyokong pelbagai kaedah storan pengguna, termasuk senarai dalam memori, fail dan pangkalan data, serta menawarkan ciri lanjutan seperti penyulitan kata laluan, pengendalian ralat tersuai dan tamat tempoh sesi.

Pemasangan

Untuk menggunakan middleware basicauth, anda perlu mengimportnya dalam aplikasi Iris anda:

import "github.com/kataras/iris/v12/middleware/basicauth"

Ciri-ciri

Fungsi Pengesahan

Inti perisian tengah ialah medan Benarkan, yang merupakan fungsi dengan tandatangan berikut:

func(ctx iris.Context, username, password string) (any, bool)

Fungsi ini bertanggungjawab untuk mengesahkan nama pengguna dan kata laluan. Ia mengembalikan objek pengguna (atau apa-apa jenis lain) dan boolean yang menunjukkan sama ada pengesahan berjaya.

Struktur Pengguna (Pembantu)

Walaupun perisian tengah tidak memerlukan struktur pengguna tertentu, anda boleh menggunakan struktur pembantu untuk mengurus data pengguna dengan lebih mudah. Berikut ialah contoh struktur pengguna:

type User struct {
    Username string   `json:"username"`
    Password string   `json:"password"`
    Roles    []string `json:"roles"`
}

Storan Pengguna Dalam Memori

Anda boleh menyimpan pengguna dalam ingatan menggunakan sekeping struktur pengguna. Ini berguna untuk aplikasi kecil atau tujuan ujian.

var users = []User{
    {"admin", "admin", []string{"admin"}},
    {"kataras", "kataras_pass", []string{"manager", "author"}},
    {"george", "george_pass", []string{"member"}},
    {"john", "john_pass", []string{}},
}

Persediaan Asas

Untuk menyediakan perisian tengah, buat instance of basicauth.Options dan hantarkannya ke 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)

Menggunakan Fail untuk Storan Pengguna

Anda boleh memuatkan pengguna daripada fail (JSON atau YAML). Ini berguna untuk aplikasi yang data pengguna kerap berubah.

auth := basicauth.Load("users.yml")

Pilihan BCRYPT

Pilihan BCRYPT membolehkan anda menggunakan bcrypt untuk pencincangan kata laluan. Bcrypt ialah fungsi pencincangan kata laluan yang direka bentuk secara intensif secara pengiraan untuk menentang serangan kekerasan. Ia digunakan secara meluas untuk menyimpan kata laluan dengan selamat.

auth := basicauth.Load("users.yml", basicauth.BCRYPT)

Anda juga boleh menggunakan pilihan BCRYPT dengan kaedah pengambilan pengguna lain, seperti dalam memori atau storan pangkalan data.

Menggunakan Pangkalan Data untuk Storan Pengguna

Untuk pengurusan pengguna yang lebih dinamik, anda boleh mengesahkan pengguna terhadap pangkalan data. Berikut ialah contoh cara menyediakan perisian tengah menggunakan pangkalan data 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)
}

Pengendalian Ralat Tersuai

Anda boleh menyesuaikan tingkah laku pengendalian ralat dengan menetapkan medan ErrorHandler dalam basicauth.Options.

opts := basicauth.Options{
    ErrorHandler: func(ctx iris.Context, err error) {
        ctx.StatusCode(iris.StatusUnauthorized)
        ctx.JSON(iris.Map{"error": "Unauthorized"})
    },
}

Tamat Tempoh Sesi

Perisian tengah menyokong tamat tempoh sesi. Anda boleh menetapkan medan MaxAge untuk menentukan tempoh selepas itu pengguna mesti mengesahkan semula.

opts := basicauth.Options{
    MaxAge: 10 * time.Minute,
}

Kutipan Sampah

Untuk mengosongkan pengguna yang telah tamat tempoh daripada memori, anda boleh menetapkan medan GC.

import "github.com/kataras/iris/v12/middleware/basicauth"

Pengendali Ujian dengan BasicAuth Middleware

Untuk menguji pengendali yang menggunakan perisian tengah BasicAuth, anda boleh menggunakan

httptest

pakej disediakan oleh Iris. Berikut ialah contoh cara menguji pengendali:

func(ctx iris.Context, username, password string) (any, bool)

Contoh

Berikut ialah contoh lengkap yang menunjukkan cara menyediakan perisian tengah dengan storan pengguna dalam memori:

type User struct {
    Username string   `json:"username"`
    Password string   `json:"password"`
    Roles    []string `json:"roles"`
}

Kesimpulan

Perisian tengah Pengesahan Asas menyediakan penyelesaian yang komprehensif untuk melindungi aplikasi web Iris anda. Dengan sokongan untuk pelbagai kaedah storan pengguna, ciri lanjutan seperti penyulitan kata laluan dan pengendalian ralat tersuai serta penyepaduan yang mudah, ia merupakan alat yang berkuasa untuk pembangun.

Atas ialah kandungan terperinci Perisian Tengah Pengesahan Asas untuk Iris. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn