Dasturiy ta'minot

Go-dev-auth: Go dasturlash tilida to'liq mustaqil autentifikatsiya kutubxonasi

11-oktabr, 2026, 19:182 ko'rish5 daqiqa o'qish
Go-dev-auth: Go dasturlash tilida to'liq mustaqil autentifikatsiya kutubxonasi

Go dasturlash tilida xavfsiz autentifikatsiya yechimlarini qidirayotgan ishlab chiquvchilar uchun yangi go-dev-auth kutubxonasi katta imkoniyatlar yaratadi. Zero-dependency yondashuv, ya'ni standart kutubxona tashqarisida hech qanday tashqi paketga bog'lanmaslik, kod bazasini soddalashtiradi va xavfsizlikni oshiradi.

Kontekst va yaratilish sabablari

Go ekotizimida autentifikatsiya uchun bir qancha kutubxonalar mavjud, lekin ko'pchiligi tashqi bog'lanishlar (OAuth klientlari, JWT kutubxonalari, bazaviy adapterlar) talab qiladi. Bu esa paketlarni yangilash, litsenziya muammolari va xavfsizlik teshiklari xavfini oshiradi. GitHub repositoryda e'lon qilingan go-dev-auth, better-auth loyihasidan ilhomlanib, to'liq mustaqil, framework-agnostic yechimni taklif qiladi.

Go Reference

Asosiy funksiyalar va texnik tafsilotlar

  • Email & password – scrypt hashing algoritmi yordamida parollarni xavfsiz saqlash, better-auth formatiga mos keladi.
  • Ijtimoiy sign-on – OAuth 2.0 / OIDC protokollari, PKCE qo'llab-quvvatlashi bilan Google, GitHub, Discord, Facebook, Microsoft, Apple, GitLab, LinkedIn, Spotify, Twitch, X kabi provayderlar standartda mavjud. Maxsus provayderlar uchun deklarativ oauth2.Spec interfeysi taqdim etilgan.
  • Session boshqaruvi – ma'lumotlar bazasida saqlanadigan sessiyalar, slaydli muddat (sliding expiration), imzolangan cookie, ixtiyoriy cookie caching va sessiyalarni ro'yxatga olish / bekor qilish endpointlari.
  • Ikki faktor (2FA) – TOTP, email OTP, backup kodlar.
  • Passkey (WebAuthn) – CBOR/COSE parsing ichki implementatsiyasi, tashqi kutubxona talab qilmaydi.
  • Magic link – parolsiz email havolalari orqali kirish.
  • Organizatsiyalar – jamoalar, rollar, takliflar, a'zolik boshqaruvi.
  • SSO – o'z domeningizga mos OIDC provayderi bilan integratsiya.
  • Admin vositalari – foydalanuvchi bloklash, rollar, impersonatsiya.
  • API kalitlari va JWT – hashlangan API kalitlari, scope'lar, EdDSA imzoli JWT, JWKS endpoint.
  • Bearer auth – Authorization header orqali brauzer tashqarisidagi mijozlar uchun autentifikatsiya.

Saqlash adapterlari interfeysi database/sql asosida qurilgan; PostgreSQL, MySQL, SQLite hamda xotira (memory) adapterlari standartda kiritilgan. Shuningdek, schema va migration SQL fayllari avtomatik generatsiya qilinadi.

Go Report Card

Konfiguratsiya va xavfsizlik mexanizmlari

Kutubxona godevauth.New funksiyasi orqali yaratiladi. Bu funksiya konfiguratsiyani tekshiradi va xavfsiz bo'lmagan holatda startni rad etadi. Masalan, Secret maydonining uzunligi 32 belgidan kam bo'lsa, BaseURL nisbiy bo'lsa yoki SameSite=None bilan xavfsiz cookie yo'q bo'lsa, ilova ishga tushmaydi.

License: MIT

Proxy muhitida ishlash uchun TrustProxyHeaders va TrustedProxies sozlamalari mavjud. Noto'g'ri konfiguratsiya barcha mijozlar uchun bitta IP manzilga limitni qo'llashga olib keladi, bu esa servisni o'chirib qo'yishi mumkin. To'g'ri sozlashda X-Forwarded-For sarlavhalari faqat ishonchli proxylardan o'qiladi, qolganlari e'tiborga olinmaydi.

go get github.com/go-dev-auth/go-dev-auth

Raqobatchilar bilan taqqoslash

Go ekotizimida authboss, go-oidc, gorilla/sessions kabi kutubxonalar keng tarqalgan. Ularning asosiy farqi:

package main

import (
	"context"
	"net/http"
	"os"
	"time"

	godevauth "github.com/go-dev-auth/go-dev-auth"
	"github.com/go-dev-auth/go-dev-auth/storage/memory"
)

func main() {
	auth, err := godevauth.New(godevauth.Config{
		BaseURL:  "http://localhost:8080",       // required
		Secret:   os.Getenv("AUTH_SECRET"),      // required, 32+ random chars
		Database: memory.New(),                  // required
		EmailAndPassword: godevauth.EmailPasswordConfig{Enabled: true},

		// Required in production if anything sits in front of this
		// process (load balancer, ingress, CDN). See below.
		Advanced: godevauth.AdvancedConfig{
			TrustProxyHeaders: true,
			TrustedProxies:    []string{"10.0.0.0/8"},
		},
	})
	if err != nil {
		panic(err)
	}

	// sweep expired one-time tokens and sessions
	defer auth.StartCleanup(context.Background(), time.Hour)()

	mux := http.NewServeMux()
	mux.Handle("/api/auth/", auth.Handler())
	http.ListenAndServe(":8080", mux)
}
  • External dependencies – ko'p kutubxonalar JWT, OAuth, password hashing uchun alohida paketlarga tayanadi, bu esa versiya moslashuvini qiyinlashtiradi.
  • Modularlik – ba'zi kutubxonalar faqat bir qism (masalan, faqat OAuth) ni ta'minlaydi, qolgan funksiyalarni qo'shimcha paketlar bilan birlashtirish kerak.
  • Test qamrovi – go-dev-auth CI matritsasi eski va yangi Go versiyalarida, race detector, lint, fuzz testlari hamda SQLite, PostgreSQL, MySQL bilan storage conformance suite ni o'z ichiga oladi.

Bu jihatlarda go-dev-auth bir qadam oldinda, chunki u bitta paketda keng funksionallikni birlashtiradi va CI orqali har tomonlama sinovdan o'tadi.

Advanced: godevauth.AdvancedConfig{
	TrustProxyHeaders: true,
	// IPs or CIDRs of your load balancers / ingress pods.
	TrustedProxies: []string{"10.0.0.0/8", "192.168.0.0/16"},
	// Or, for a provider-specific header:
	// IPAddressHeaders: []string{"CF-Connecting-IP"},
},

Cheklovlar va ochiq savollar

Hali pre‑1.0 bosqichida bo'lgani sababli, API hali o'zgarishi mumkin. Versiya 1.0 chiqishidan oldin quyidagi masalalar hal qilinishi kutiladi:

func TestConformance(t *testing.T) {
	storagetest.Run(t, func(t *testing.T) (storage.Adapter, func()) {
		return myAdapter(storagetest.Schema()), func() {}
	})
}
  • MySQL adapterining avtomatlashtirilgan testlari yakunlanishi.
  • Uchinchi tomon xavfsizlik auditining natijalari.
  • Raqobatbardosh provayderlar uchun oauth2.Spec ning kengaytirilgan misollari.

Shuningdek, rate limiting mexanizmi IP manzilga asoslangan, lekin foydalanuvchi identifikatori bo'yicha dinamik limitlar qo'shilishi mumkin. Bu esa DDoS hujumlariga qarshi yanada mustahkam himoya yaratadi.

import (
	"go.mongodb.org/mongo-driver/mongo"
	"go.mongodb.org/mongo-driver/mongo/options"
	"github.com/go-dev-auth/go-dev-auth/storage/mongostore"
)

client, err := mongo.Connect(options.Client().ApplyURI(os.Getenv("MONGODB_URI")))
store := mongostore.New(client.Database("myapp"))

auth, err := godevauth.New(godevauth.Config{Database: store, /* ... */})

Kimga va qanday ta'sir qiladi?

Go‑da mikroservis arxitekturasi bilan ishlovchi jamoalar, ayniqsa autentifikatsiya va avtorizatsiya qatlamini mustaqil komponent sifatida ajratmoqchi bo'lganlar, bu kutubxonadan foyda ko'radi. Zero‑dependency yondashuv dev‑ops jarayonlarini soddalashtiradi, konteyner imijlarini kichikroq qiladi va CI/CD pipeline’larda qo'shimcha paketlarni boshqarish zaruratini kamaytiradi.

Shuningdek, xavfsizlik auditorlari uchun docs/security-model.md faylida ta'riflangan threat model, xavfsizlik siyosatlari va tavsiya etilgan konfiguratsiyalarni ko'rib chiqish imkoniyati mavjud.

Xulosa

Go-dev-auth Go dasturchilari uchun keng qamrovli, mustaqil va xavfsiz autentifikatsiya platformasini taklif etadi. Email, ijtimoiy sign-on, ikki faktor, passkey, JWT va API kalitlari kabi zamonaviy funksiyalarni bitta paketda birlashtiradi, shu bilan birga tashqi bog'lanishlarni yo'q qiladi. CI matritsasi, keng test qamrovi va aniq xavfsizlik tavsiyalari kutubxonaning ishonchliligini oshiradi. Pre‑1.0 bosqichida bo'lsa-da, ishlab chiquvchilar hozirgi versiyani sinab ko'rishlari va real loyihalarda qo'llashlari mumkin. Kelgusi versiyada API barqarorligi, xavfsizlik auditlari va qo'shimcha adapterlar kutilyapti, bu esa kutubxonani Go ekotizimida yetakchi autentifikatsiya yechimiga aylantiradi.

Asl manba: github.com

Manba: Hacker News
#go #authentication #library #security
Telegram da muhokama qilish