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 :
Importez le plug-in Firebase :
import "github.com/firebase/genkit/go/plugins/firebase"
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.
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.