流程驗證

Genkit 支援流程層級驗證,因此你可以保護流程,確保只有獲得授權的使用者能執行這些流程。在將流程部署為 HTTP 端點時,這個方法特別實用。

設定流程驗證

如要為流程新增驗證,您可以在定義流程時使用 WithFlowAuth 選項。這個選項會實作 FlowAuth 介面,提供處理驗證和授權的方法。

以下範例說明如何使用驗證功能定義流程:

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

在這個範例中,我們將使用 Firebase 驗證外掛程式來處理驗證作業。policy 函式會定義授權邏輯,檢查驗證環境中的使用者 ID 是否與輸入的使用者 ID 相符。

使用 Firebase 驗證外掛程式

有了 Firebase 驗證外掛程式,您可以輕鬆將 Firebase 驗證與 Genkit 流程整合。步驟如下:

  1. 匯入 Firebase 外掛程式:

    import "github.com/firebase/genkit/go/plugins/firebase"
    
  2. 建立 Firebase 驗證供應商:

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

    NewAuth 函式使用三個引數:

    • ctx:Firebase 初始化的情境。
    • policy:定義授權邏輯的函式。
    • required:布林值,表示直接呼叫是否需要驗證。
  3. 定義流程時,請使用驗證供應商:

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

處理 HTTP 要求中的驗證

如果您將流程部署為 HTTP 端點,Firebase 驗證外掛程式就會自動處理傳入要求的驗證作業。它預期可在 HTTP 要求的 Authorization 標頭中取得不記名憑證。

在本機執行已驗證的流程

在本機或其他流程中執行已驗證的流程時,您可以使用 WithLocalAuth 選項提供本機驗證內容:

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

這樣一來,您不必提供有效的 Firebase 權杖,即可測試已驗證的流程。