フロー認証

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 auth プラグインを使用して認証を処理します。policy 関数は認可ロジックを定義し、認証コンテキストのユーザー ID が入力ユーザー ID と一致するかどうかを確認します。

Firebase Auth プラグインの使用

Firebase auth プラグインを使用すると、Firebase Authentication を Genkit フローにすばやく統合できます。ここではその使用方法をご紹介します。

  1. Firebase プラグインをインポートします。

    import "github.com/firebase/genkit/go/plugins/firebase"
    
  2. Firebase 認証プロバイダを作成します。

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

    NewAuth 関数は次の 3 つの引数を取ります。

    • ctx: Firebase 初期化のコンテキスト。
    • policy: 認可ロジックを定義する関数。
    • required: 直接呼び出しに認証が必要かどうかを示すブール値。
  3. フローを定義する際には認証プロバイダを使用します。

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

HTTP リクエストでの認証の処理

フローが HTTP エンドポイントとしてデプロイされると、Firebase auth プラグインは受信リクエストの認証を自動的に処理します。HTTP リクエストの Authorization ヘッダーに署名なしトークンが含まれていることを想定しています。

認証済みフローをローカルで実行する

認証済みフローをローカルで実行する場合や、他のフロー内から実行する場合は、WithLocalAuth オプションを使用してローカル認証コンテキストを指定できます。

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

これにより、有効な Firebase トークンを指定しなくても、認証済みフローをテストできます。