Autentikasi Flow

Genkit mendukung autentikasi tingkat flow, sehingga Anda dapat mengamankan flow dan memastikan hanya pengguna yang diotorisasi yang dapat menjalankannya. Hal ini sangat berguna saat men-deploy flow sebagai endpoint HTTP.

Mengonfigurasi Autentikasi Flow

Untuk menambahkan autentikasi ke suatu flow, Anda dapat menggunakan opsi WithFlowAuth saat menentukan flow. Opsi ini menggunakan implementasi antarmuka FlowAuth, yang menyediakan metode untuk menangani autentikasi dan otorisasi.

Berikut adalah contoh cara menentukan flow dengan autentikasi:

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),
)

Dalam contoh ini, kita menggunakan plugin Firebase auth untuk menangani autentikasi. Fungsi policy menentukan logika otorisasi, yang memeriksa apakah ID pengguna dalam konteks auth cocok dengan ID pengguna input.

Menggunakan Plugin Firebase Auth

Plugin Firebase auth menghadirkan cara mudah untuk mengintegrasikan Firebase Authentication dengan flow Genkit Anda. Berikut cara menggunakannya:

  1. Impor plugin Firebase:

    import "github.com/firebase/genkit/go/plugins/firebase"
    
  2. Buat penyedia Firebase auth:

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

    Fungsi NewAuth menggunakan tiga argumen:

    • ctx: Konteks untuk inisialisasi Firebase.
    • policy: Fungsi yang menentukan logika otorisasi Anda.
    • required: Boolean yang menunjukkan apakah autentikasi diperlukan untuk panggilan langsung.
  3. Gunakan penyedia auth saat menentukan flow Anda:

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

Menangani Autentikasi dalam Permintaan HTTP

Saat flow di-deploy sebagai endpoint HTTP, plugin Firebase auth akan secara otomatis menangani autentikasi untuk permintaan yang masuk. Plugin ini mengharapkan Token pemilik di header Otorisasi permintaan HTTP.

Menjalankan Flow Terautentikasi Secara Lokal

Saat menjalankan flow terautentikasi secara lokal atau dari dalam flow lain, Anda dapat memberikan konteks autentikasi lokal menggunakan opsi WithLocalAuth:

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

Dengan demikian, Anda dapat menguji flow terautentikasi tanpa perlu menyediakan token Firebase yang valid.