首頁 > 後端開發 > Golang > Iris 基本驗證中介軟體

Iris 基本驗證中介軟體

Barbara Streisand
發布: 2024-11-01 18:40:29
原創
432 人瀏覽過

Basic Authentication Middleware for Iris

概述

基本驗證中間件提供了一種強大且靈活的方式來保護您的 Iris Web 應用程式。它支援各種用戶儲存方法,包括記憶體列表、檔案和資料庫,並提供密碼加密、自訂錯誤處理和會話過期等高級功能。

安裝

要使用 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 是一種密碼雜湊函數,旨在計算密集型以抵禦暴力攻擊。它廣泛用於安全存儲密碼。

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測驗

Iris 提供的套餐。以下是如何測試處理程序的範例:

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 Web 應用程式。它支援各種用戶儲存方法、密碼加密和自訂錯誤處理等高級功能,並且易於集成,是開發人員的強大工具。

以上是Iris 基本驗證中介軟體的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:dev.to
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板