Genkit supporta l'autenticazione a livello di flusso, consentendoti di proteggere i tuoi flussi e di assicurarti che solo gli utenti autorizzati possano eseguirli. Questa operazione è particolarmente utile quando esegui il deployment dei flussi come endpoint HTTP.
Configurazione dell'autenticazione dei flussi
Per aggiungere l'autenticazione a un flusso, puoi utilizzare l'opzione WithFlowAuth
durante la definizione del flusso. Questa opzione accetta un'implementazione dell'interfaccia FlowAuth
, che fornisce metodi per gestire l'autenticazione e l'autorizzazione.
Ecco un esempio di come definire un flusso con autenticazione:
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 questo esempio utilizziamo il plug-in di autenticazione Firebase per gestire l'autenticazione. La funzione policy
definisce la logica di autorizzazione, controllando se l'ID utente nel contesto di autenticazione corrisponde all'ID utente inserito.
Utilizzo del plug-in Firebase Auth
Il plug-in Firebase Auth offre un modo semplice per integrare Firebase Authentication con i tuoi flussi Genkit. Ecco come utilizzarlo:
Importa il plug-in Firebase:
import "github.com/firebase/genkit/go/plugins/firebase"
Crea un provider di autenticazione Firebase:
firebaseAuth, err := firebase.NewAuth(ctx, policy, required)
La funzione
NewAuth
accetta tre argomenti:ctx
: il contesto per l'inizializzazione di Firebase.policy
: una funzione che definisce la logica di autorizzazione.required
: un valore booleano che indica se è richiesta l'autenticazione per le chiamate dirette.
Utilizza il provider di autenticazione quando definisci il flusso:
genkit.DefineFlow("secureUserFlow", userDataFunc, genkit.WithFlowAuth(firebaseAuth))
Gestione dell'autenticazione nelle richieste HTTP
Quando il flusso viene implementato come endpoint HTTP, il plug-in di autenticazione Firebase gestisce automaticamente l'autenticazione per le richieste in arrivo. Si aspetta un token Bearer nell'intestazione Authorization della richiesta HTTP.
Eseguire i flussi autenticati in locale
Quando esegui flussi autenticati localmente o all'interno di altri flussi, puoi fornire il contesto di autenticazione locale utilizzando l'opzione WithLocalAuth
:
response, err := authenticatedFlow.Run(ctx, "user123",
genkit.WithLocalAuth(map[string]any{"UID": "user123"}))
In questo modo puoi testare i flussi autenticati senza dover fornire un token Firebase valido.