Uwierzytelnianie procesu

Genkit obsługuje uwierzytelnianie na poziomie przepływu, co pozwala zabezpieczyć przepływy i mieć pewność, że tylko autoryzowani użytkownicy mogą je wykonywać. Jest to szczególnie przydatne podczas wdrażania przepływów jako punktów końcowych HTTP.

Konfigurowanie uwierzytelniania przepływu

Aby dodać uwierzytelnianie do przepływu, możesz użyć opcji WithFlowAuth podczas definiowania przepływu. Ta opcja wymaga implementacji interfejsu FlowAuth, który udostępnia metody uwierzytelniania i autoryzacji.

Oto przykład definiowania przepływu z uwierzytelnianiem:

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

W tym przykładzie do obsługi uwierzytelniania używamy wtyczki uwierzytelniania Firebase. Funkcja policy definiuje logikę autoryzacji, sprawdzając, czy identyfikator użytkownika w kontekście uwierzytelniania pasuje do wejściowego identyfikatora użytkownika.

Korzystanie z wtyczki Firebase Auth

Wtyczka uwierzytelniania Firebase ułatwia integrację uwierzytelniania Firebase z procesami Genkit. Aby to zrobić:

  1. Zaimportuj wtyczkę Firebase:

    import "github.com/firebase/genkit/go/plugins/firebase"
    
  2. Utwórz dostawcę uwierzytelniania Firebase:

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

    Funkcja NewAuth przyjmuje 3 argumenty:

    • ctx: kontekst inicjowania Firebase.
    • policy: funkcja definiująca logikę autoryzacji.
    • required: wartość logiczna wskazująca, czy w przypadku bezpośrednich wywołań jest wymagane uwierzytelnianie.
  3. Użyj dostawcy uwierzytelniania podczas definiowania przepływu:

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

Obsługa uwierzytelniania w żądaniach HTTP

Gdy Twój przepływ zostanie wdrożony jako punkt końcowy HTTP, wtyczka uwierzytelniania Firebase będzie automatycznie obsługiwać uwierzytelnianie żądań przychodzących. W nagłówku autoryzacji żądania HTTP oczekuje tokena okaziciela.

Lokalne uruchamianie uwierzytelnionych przepływów

Gdy uruchamiasz uwierzytelnione przepływy lokalnie lub z innych przepływów, możesz podać lokalny kontekst uwierzytelniania za pomocą opcji WithLocalAuth:

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

Umożliwia to testowanie uwierzytelnionych przepływów bez konieczności podawania prawidłowego tokena Firebase.