Authentification de flux

Genkit est compatible avec l'authentification au niveau du flux, ce qui vous permet de sécuriser vos flux et de vous assurer que seuls les utilisateurs autorisés peuvent les exécuter. Cela est particulièrement utile lorsque vous déployez des flux en tant que points de terminaison HTTP.

Configurer l'authentification de flux

Pour ajouter une authentification à un flux, vous pouvez utiliser l'option WithFlowAuth lorsque vous définissez le flux. Cette option utilise une implémentation de l'interface FlowAuth, qui fournit des méthodes pour gérer l'authentification et l'autorisation.

Voici un exemple de définition d'un flux avec authentification :

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

Dans cet exemple, nous utilisons le plug-in Firebase Authentication pour gérer l'authentification. La fonction policy définit la logique d'autorisation, en vérifiant si l'ID utilisateur du contexte d'authentification correspond à l'ID utilisateur saisi.

Utiliser le plug-in Firebase Auth

Le plug-in d'authentification Firebase permet d'intégrer facilement Firebase Authentication à vos flux Genkit. Pour ce faire, procédez comme suit :

  1. Importez le plug-in Firebase :

    import "github.com/firebase/genkit/go/plugins/firebase"
    
  2. Créez un fournisseur d'authentification Firebase :

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

    La fonction NewAuth prend en compte trois arguments :

    • ctx : contexte de l'initialisation de Firebase.
    • policy : fonction qui définit votre logique d'autorisation.
    • required : valeur booléenne indiquant si l'authentification est requise pour les appels directs.
  3. Utilisez le fournisseur d'authentification lorsque vous définissez votre flux:

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

Gérer l'authentification dans les requêtes HTTP

Lorsque votre flux est déployé en tant que point de terminaison HTTP, le plug-in d'authentification Firebase gère automatiquement l'authentification des requêtes entrantes. Il attend un jeton de support dans l'en-tête "Authorization" de la requête HTTP.

Exécuter des flux authentifiés localement

Lorsque vous exécutez des flux authentifiés localement ou à partir d'autres flux, vous pouvez fournir un contexte d'authentification local à l'aide de l'option WithLocalAuth:

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

Vous pouvez ainsi tester les flux authentifiés sans avoir à fournir de jeton Firebase valide.