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

Grundlegende Authentifizierungs-Middleware für Iris

Barbara Streisand
Freigeben: 2024-11-01 18:40:29
Original
434 Leute haben es durchsucht

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"
Nach dem Login kopieren
Nach dem Login kopieren

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)
Nach dem Login kopieren
Nach dem Login kopieren

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"`
}
Nach dem Login kopieren
Nach dem Login kopieren

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{}},
}
Nach dem Login kopieren

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)
Nach dem Login kopieren

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")
Nach dem Login kopieren

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)
Nach dem Login kopieren

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)
}
Nach dem Login kopieren

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"})
    },
}
Nach dem Login kopieren

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,
}
Nach dem Login kopieren

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"
Nach dem Login kopieren
Nach dem Login kopieren

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)
Nach dem Login kopieren
Nach dem Login kopieren

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"`
}
Nach dem Login kopieren
Nach dem Login kopieren

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!

Quelle:dev.to
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage