SDK لـGo
حزمة Go هي الحزمة الأساسية: مكتوبة يدويًا ودون اعتماديات خارج المكتبة القياسية، وخضعت للاختبار بمتجه معروف مثبت لتوقيع HMAC ومجموعة كاملة من الحالات الطرفية لـJWT.
التثبيت
go get github.com/corezt/ztxbas/sdk-go
تتطلب Go 1.22 أو أحدث.
الاستيراد
import ztxbas "github.com/corezt/ztxbas/sdk-go"
مثال متكامل مختصر
c, err := ztxbas.New(
"https://ztxbas.example.com",
"app_YOUR_APPLICATION_ID",
"YOUR_HMAC_SECRET_HEX",
)
if err != nil { log.Fatal(err) }
ctx, cancel := context.WithTimeout(context.Background(), 30*time.Second)
defer cancel()
_, _ = c.RegisterUser(ctx, ztxbas.RegisterUserRequest{Email: "alice@example.com"})
_, _ = c.RegisterOrigin(ctx, ztxbas.RegisterOriginRequest{
Origin: "https://app.example.com", DisplayName: "Example App",
})
ch, _ := c.CreateChallenge(ctx, ztxbas.CreateChallengeRequest{
UserEmail: "alice@example.com", Origin: "https://app.example.com",
})
claims, err := c.PollChallenge(ctx, ch.ChallengeID)
if err != nil { log.Fatal(err) }
fmt.Println(claims.Email, claims.Origin)
الأخطاء كقيم محددة
طابق القيم المحددة باستخدام errors.Is:
_, err := c.PollChallenge(ctx, id)
switch {
case errors.Is(err, ztxbas.ErrChallengeDenied): // user tapped Deny
case errors.Is(err, ztxbas.ErrChallengeExpired): // TTL elapsed
case errors.Is(err, ztxbas.ErrUnregisteredOrigin): // programmer error
}
للحصول على صيغة خطأ الخادم الأصلية:
var apiErr *ztxbas.APIError
if errors.As(err, &apiErr) {
log.Printf("code=%s status=%d message=%s", apiErr.Code, apiErr.StatusCode, apiErr.Message)
}
وضع التحقق فقط
إذا كان نظامك الخلفي يستقبل JWT من واجهة هاتف ولا يتصل بنفسه بـZTXBAS، فاستخدم المدقق وحده:
v, _ := ztxbas.NewVerifier(
"https://ztxbas.example.com/.well-known/jwks.json",
ztxbas.WithExpectedIssuer("https://ztxbas.example.com"),
)
claims, err := v.Verify(ctx, jwtFromMobile)
المستودع والمراجع
- الشيفرة:
sdk-go/ - توثيق Go:
github.com/corezt/ztxbas/sdk-go - مثال البدء:
quickstarts/go/