احراز هویت جریان

Genkit از احراز هویت در سطح جریان پشتیبانی می کند و به شما امکان می دهد جریان های خود را ایمن کنید و اطمینان حاصل کنید که فقط کاربران مجاز می توانند آنها را اجرا کنند. این به ویژه هنگام استقرار جریان ها به عنوان نقاط پایانی HTTP مفید است.

پیکربندی Flow Authentication

برای افزودن احراز هویت به یک جریان، می توانید هنگام تعریف جریان از گزینه 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 auth برای مدیریت احراز هویت استفاده می‌کنیم. تابع policy منطق مجوز را تعریف می کند و بررسی می کند که آیا شناسه کاربر در زمینه احراز هویت با شناسه کاربر ورودی مطابقت دارد یا خیر.

با استفاده از افزونه Firebase Auth

افزونه Firebase auth یک راه آسان برای ادغام احراز هویت Firebase با جریان های Genkit شما فراهم می کند. در اینجا نحوه استفاده از آن آمده است:

  1. افزونه Firebase را وارد کنید:

    import "github.com/firebase/genkit/go/plugins/firebase"
    
  2. یک ارائه دهنده تأیید اعتبار Firebase ایجاد کنید:

    firebaseAuth, err := firebase.NewAuth(ctx, policy, required)
    

    تابع NewAuth سه آرگومان می گیرد:

    • ctx : زمینه اولیه سازی Firebase.
    • policy : تابعی که منطق مجوز شما را تعریف می کند.
    • required : یک بولی که نشان می دهد آیا برای تماس های مستقیم احراز هویت لازم است یا خیر.
  3. هنگام تعریف جریان خود از ارائه دهنده تأیید اعتبار استفاده کنید:

    genkit.DefineFlow("secureUserFlow", userDataFunc, genkit.WithFlowAuth(firebaseAuth))
    

مدیریت احراز هویت در درخواست های HTTP

هنگامی که جریان شما به عنوان یک نقطه پایانی HTTP مستقر می شود، افزونه تأیید اعتبار Firebase به طور خودکار احراز هویت درخواست های دریافتی را انجام می دهد. انتظار دارد یک توکن حامل در هدر مجوز درخواست HTTP وجود داشته باشد.

اجرای جریان های تایید شده به صورت محلی

هنگام اجرای جریان های تایید شده به صورت محلی یا از داخل جریان های دیگر، می توانید با استفاده از گزینه WithLocalAuth زمینه احراز هویت محلی را ارائه دهید:

response, err := authenticatedFlow.Run(ctx, "user123",
	genkit.WithLocalAuth(map[string]any{"UID": "user123"}))

این به شما امکان می دهد بدون نیاز به ارائه یک نشانه Firebase معتبر، جریان های تأیید شده را آزمایش کنید.