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.
Um die Basicauth-Middleware zu verwenden, müssen Sie sie in Ihre Iris-Anwendung importieren:
import "github.com/kataras/iris/v12/middleware/basicauth"
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.
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"` }
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{}}, }
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)
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")
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.
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) }
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"}) }, }
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, }
Um abgelaufene Benutzer aus dem Speicher zu löschen, können Sie das GC-Feld festlegen.
import "github.com/kataras/iris/v12/middleware/basicauth"
Um Handler zu testen, die die BasicAuth-Middleware verwenden, können Sie
verwendenhttptest
Paket bereitgestellt von Iris. Hier ist ein Beispiel, wie man einen Handler testet:
func(ctx iris.Context, username, password string) (any, bool)
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"` }
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!