Genkit תומך באימות ברמת התהליך, המאפשר לאבטח את התהליכים ולוודא שרק משתמשים מורשים יכולים לבצע אותם. האפשרות הזו שימושית במיוחד כשפורסים תהליכים כנקודות קצה של HTTP.
הגדרת אימות תהליך
כדי להוסיף אימות לתהליך, אפשר להשתמש באפשרות WithFlowAuth
כשמגדירים את התהליך. באפשרות הזו משתמשים בהטמעה של הממשק FlowAuth
, שמספק שיטות לטיפול באימות ובהרשאה.
לפניכם דוגמה להגדרה של תהליך אימות:
ctx := context.Background()
// Define an auth policy and create a Firebase auth provider
firebaseAuth, err := firebase.NewAuth(ctx, func(authContext genkit.AuthContext, input any) error {
// The type must match the input type of the flow.
userID := input.(string)
if authContext == nil || authContext["UID"] != userID {
return errors.New("user ID does not match")
}
return nil
}, true)
if err != nil {
log.Fatalf("failed to set up Firebase auth: %v", err)
}
// Define a flow with authentication
authenticatedFlow := genkit.DefineFlow(
"authenticated-flow",
func(ctx context.Context, userID string) (string, error) {
return fmt.Sprintf("Secure data for user %s", userID), nil
},
genkit.WithFlowAuth(firebaseAuth),
)
בדוגמה הזו אנחנו משתמשים בפלאגין לאימות של Firebase כדי לטפל באימות. הפונקציה policy
מגדירה את הלוגיקה של ההרשאה, ובודקת אם מזהה המשתמש בהקשר האימות תואם למזהה המשתמש שהוזן.
שימוש בפלאגין Firebase Auth
הפלאגין לאימות ב-Firebase מאפשר לשלב בקלות אימות ב-Firebase בתהליכי העבודה ב-Genkit. כך משתמשים בו:
מייבאים את הפלאגין של Firebase:
import "github.com/firebase/genkit/go/plugins/firebase"
יוצרים ספק אימות של Firebase:
firebaseAuth, err := firebase.NewAuth(ctx, policy, required)
הפונקציה
NewAuth
מתייחסת לשלושה ארגומנטים:ctx
: ההקשר לאינטוליזציה של Firebase.policy
: פונקציה שמגדירה את הלוגיקה של ההרשאה.required
: ערך בוליאני שמציין אם נדרש אימות לשיחות ישירות.
משתמשים בספק האימות כשמגדירים את התהליך:
genkit.DefineFlow("secureUserFlow", userDataFunc, genkit.WithFlowAuth(firebaseAuth))
טיפול באימות בבקשות HTTP
כשפורסים את התהליך כנקודת קצה מסוג HTTP, הפלאגין לאימות של Firebase מטפל באופן אוטומטי באימות של בקשות נכנסות. הוא מצפה לאסימון למוכ"ז בכותרת Authorization של בקשת ה-HTTP.
הרצת תהליכים מאומתים באופן מקומי
כשמריצים תהליכים מאומתים באופן מקומי או מתוך תהליכים אחרים, אפשר לספק הקשר של אימות מקומי באמצעות האפשרות WithLocalAuth
:
response, err := authenticatedFlow.Run(ctx, "user123",
genkit.WithLocalAuth(map[string]any{"UID": "user123"}))
כך תוכלו לבדוק תהליכים מאומתים בלי לספק טוקן Firebase תקף.