Akış Kimlik Doğrulaması

Genkit, akış düzeyinde kimlik doğrulamayı destekleyerek akışlarınızın güvenliğini sağlamanıza ve akışlarınızı yalnızca yetkili kullanıcıların yürütmesine olanak tanımanıza olanak tanır. Bu, özellikle akışları HTTP uç noktaları olarak dağıtırken kullanışlıdır.

Akış Kimlik Doğrulamasını Yapılandırma

Bir akışa kimlik doğrulaması eklemek için akışı tanımlarken WithFlowAuth seçeneğini kullanabilirsiniz. Bu seçenek, kimlik doğrulama ve yetkilendirmeye ilişkin yöntemler sunan FlowAuth arayüzünün uygulamasını alır.

Aşağıda, kimlik doğrulamayla bir akışın nasıl tanımlanacağına ilişkin bir örnek verilmiştir:

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

Bu örnekte, kimlik doğrulaması için Firebase auth eklentisini kullanıyoruz. policy işlevi, yetkilendirme mantığını tanımlayarak kimlik doğrulama bağlamındaki kullanıcı kimliğinin, girişteki kullanıcı kimliğiyle eşleşip eşleşmediğini kontrol eder.

Firebase Auth Eklentisini Kullanma

Firebase kimlik doğrulama eklentisi, Firebase Authentication'ı Genkit akışlarınıza entegre etmenin kolay bir yolunu sağlar. Nasıl kullanacağınız aşağıda açıklanmıştır:

  1. Firebase eklentisini içe aktarın:

    import "github.com/firebase/genkit/go/plugins/firebase"
    
  2. Firebase kimlik doğrulama sağlayıcısı oluşturun:

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

    NewAuth işlevi üç bağımsız değişken alır:

    • ctx: Firebase'i başlatma bağlamı.
    • policy: Yetkilendirme mantığınızı tanımlayan bir işlev.
    • required: Doğrudan çağrılar için kimlik doğrulamanın gerekli olup olmadığını gösteren boole değeri.
  3. Akışınızı tanımlarken kimlik doğrulama sağlayıcısını kullanın:

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

HTTP İsteklerinde Kimlik Doğrulaması Yönetme

Akışınız HTTP uç noktası olarak dağıtıldığında Firebase kimlik doğrulama eklentisi, gelen istekler için kimlik doğrulamasını otomatik olarak gerçekleştirir. HTTP isteğinin Yetkilendirme başlığında hamiline ait jeton bekler.

Kimliği Doğrulanmış Akışları Yerel Olarak Çalıştırma

Kimliği doğrulanmış akışları yerel olarak veya başka akışlardan çalıştırırken WithLocalAuth seçeneğini kullanarak yerel kimlik doğrulama bağlamı sağlayabilirsiniz:

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

Bu sayede, geçerli bir Firebase jetonu sağlamanıza gerek kalmadan kimliği doğrulanmış akışları test edebilirsiniz.