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 は、ブルート フォース攻撃に対抗するために大量の計算を行うように設計されたパスワード ハッシュ関数です。パスワードを安全に保存するために広く使用されています。
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 ミドルウェアを使用するハンドラーをテストするには、
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 サイトの他の関連記事を参照してください。