إنتقل إلى المحتوى الرئيسي

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)

المستودع والمراجع​