Heim >Backend-Entwicklung >Golang >Grundlegende Authentifizierungs-Middleware für Iris

Grundlegende Authentifizierungs-Middleware für Iris

Barbara Streisand
Barbara StreisandOriginal
2024-11-01 18:40:29435Durchsuche

Basic Authentication Middleware for Iris

Überblick

Die Basic Authentication-Middleware bietet eine robuste und flexible Möglichkeit, Ihre Iris-Webanwendungen zu sichern. Es unterstützt verschiedene Benutzerspeichermethoden, einschließlich In-Memory-Listen, Dateien und Datenbanken, und bietet erweiterte Funktionen wie Passwortverschlüsselung, benutzerdefinierte Fehlerbehandlung und Sitzungsablauf.

Installation

Um die Basicauth-Middleware zu verwenden, müssen Sie sie in Ihre Iris-Anwendung importieren:

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

Merkmale

Authentifizierungsfunktion

Der Kern der Middleware ist das Feld „Zulassen“, eine Funktion mit der folgenden Signatur:

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

Diese Funktion ist für die Validierung des Benutzernamens und Passworts verantwortlich. Es gibt ein Benutzerobjekt (oder einen beliebigen anderen Typ) und einen booleschen Wert zurück, der angibt, ob die Authentifizierung erfolgreich war.

Benutzerstruktur (Helfer)

Während die Middleware keine bestimmte Benutzerstruktur erfordert, können Sie eine Hilfsstruktur verwenden, um Benutzerdaten bequemer zu verwalten. Hier ist ein Beispiel für eine Benutzerstruktur:

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

In-Memory-Benutzerspeicher

Sie können Benutzer mithilfe eines Teils von Benutzerstrukturen im Speicher speichern. Dies ist nützlich für kleine Anwendungen oder Testzwecke.

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

Grundeinrichtung

Um die Middleware einzurichten, erstellen Sie eine Instanz von basicauth.Options und übergeben Sie sie an 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)

Verwenden einer Datei zur Benutzerspeicherung

Sie können Benutzer aus einer Datei (JSON oder YAML) laden. Dies ist nützlich für Anwendungen, bei denen sich Benutzerdaten häufig ändern.

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

BCRYPT-Option

Mit der BCRYPT-Option können Sie bcrypt für das Passwort-Hashing verwenden. Bcrypt ist eine Passwort-Hashing-Funktion, die rechenintensiv ist, um Brute-Force-Angriffen zu widerstehen. Es wird häufig zum sicheren Speichern von Passwörtern verwendet.

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

Sie können die BCRYPT-Option auch mit anderen Benutzerabrufmethoden verwenden, z. B. In-Memory- oder Datenbankspeicherung.

Verwenden einer Datenbank für die Benutzerspeicherung

Für eine dynamischere Benutzerverwaltung können Sie Benutzer anhand einer Datenbank validieren. Hier ist ein Beispiel für die Einrichtung der Middleware mithilfe einer MySQL-Datenbank:

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)
}

Benutzerdefinierte Fehlerbehandlung

Sie können das Verhalten bei der Fehlerbehandlung anpassen, indem Sie das Feld „ErrorHandler“ in „basicauth.Options“ festlegen.

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

Sitzungsablauf

Die Middleware unterstützt den Sitzungsablauf. Sie können das Feld „MaxAge“ festlegen, um die Dauer anzugeben, nach der sich der Benutzer erneut authentifizieren muss.

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

Müllabfuhr

Um abgelaufene Benutzer aus dem Speicher zu löschen, können Sie das GC-Feld festlegen.

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

Testen von Handlern mit BasicAuth-Middleware

Um Handler zu testen, die die BasicAuth-Middleware verwenden, können Sie

verwenden

httptest

Paket bereitgestellt von Iris. Hier ist ein Beispiel, wie man einen Handler testet:

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

Beispiel

Hier ist ein vollständiges Beispiel, das zeigt, wie die Middleware mit In-Memory-Benutzerspeicher eingerichtet wird:

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

Abschluss

Die Basic Authentication-Middleware bietet eine umfassende Lösung zur Sicherung Ihrer Iris-Webanwendungen. Mit der Unterstützung verschiedener Benutzerspeichermethoden, erweiterten Funktionen wie Passwortverschlüsselung und benutzerdefinierter Fehlerbehandlung sowie einfacher Integration ist es ein leistungsstarkes Tool für Entwickler.

Das obige ist der detaillierte Inhalt vonGrundlegende Authentifizierungs-Middleware für Iris. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn