Iris用Basic認証ミドルウェア

Barbara Streisand
リリース: 2024-11-01 18:40:29
オリジナル
332 人が閲覧しました

Basic Authentication Middleware for Iris

概要

Basic 認証ミドルウェアは、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 を使用できます。 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 ミドルウェアを使用するハンドラーをテストするには、

httptest

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"`
}
ログイン後にコピー
ログイン後にコピー

結論

Basic 認証ミドルウェアは、Iris Web アプリケーションを保護するための包括的なソリューションを提供します。さまざまなユーザー ストレージ方法のサポート、パスワード暗号化やカスタム エラー処理などの高度な機能、簡単な統合を備えた、開発者にとって強力なツールです。

以上がIris用Basic認証ミドルウェアの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:dev.to
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!