Ablaufauthentifizierung

Genkit unterstützt die Authentifizierung auf Ablaufebene, sodass Sie Ihre Abläufe sichern und dafür sorgen können, dass nur autorisierte Nutzer sie ausführen können. Das ist besonders nützlich, wenn Sie Abläufe als HTTP-Endpunkte bereitstellen.

Ablaufauthentifizierung konfigurieren

Wenn Sie einem Ablauf eine Authentifizierung hinzufügen möchten, können Sie beim Definieren des Ablaufs die Option WithFlowAuth verwenden. Für diese Option wird eine Implementierung der FlowAuth-Schnittstelle verwendet, die Methoden für die Authentifizierung und Autorisierung bietet.

Hier ein Beispiel für die Definition eines Ablaufs mit Authentifizierung:

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

In diesem Beispiel verwenden wir das Firebase Auth-Plug-in für die Authentifizierung. Die Funktion policy definiert die Autorisierungslogik und prüft, ob die Nutzer-ID im Auth-Kontext mit der eingegebenen Nutzer-ID übereinstimmt.

Firebase Auth-Plug-in verwenden

Das Firebase-Authentifizierungs-Plug-in bietet eine einfache Möglichkeit, Firebase Authentication in Ihre Genkit-Abläufe zu integrieren. So verwenden Sie die Funktion:

  1. Firebase-Plug-in importieren:

    import "github.com/firebase/genkit/go/plugins/firebase"
    
  2. So erstellen Sie einen Firebase-Authentifizierungsanbieter:

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

    Die NewAuth-Funktion verwendet drei Argumente:

    • ctx: Der Kontext für die Firebase-Initialisierung.
    • policy: Eine Funktion, die die Autorisierungslogik definiert.
    • required: Ein boolescher Wert, der angibt, ob für direkte Aufrufe eine Authentifizierung erforderlich ist.
  3. Verwenden Sie zum Definieren des Datenflusses den Authentifizierungsanbieter:

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

Authentifizierung in HTTP-Anfragen verarbeiten

Wenn Ihr Ablauf als HTTP-Endpunkt bereitgestellt wird, übernimmt das Firebase Auth-Plug-in automatisch die Authentifizierung für eingehende Anfragen. Im Autorisierungsheader der HTTP-Anfrage wird ein Inhabertoken erwartet.

Authentifizierte Abläufe lokal ausführen

Wenn Sie authentifizierte Abläufe lokal oder in anderen Abläufen ausführen, können Sie mit der Option WithLocalAuth lokalen Authentifizierungskontext angeben:

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

So können Sie authentifizierte Abläufe testen, ohne ein gültiges Firebase-Token angeben zu müssen.