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 フローにすばやく統合できます。ここではその使用方法をご紹介します。
Firebase プラグインをインポートします。
import "github.com/firebase/genkit/go/plugins/firebase"
Firebase 認証プロバイダを作成します。
firebaseAuth, err := firebase.NewAuth(ctx, policy, required)
NewAuth
関数は次の 3 つの引数を取ります。ctx
: Firebase の初期化のコンテキスト。policy
: 認可ロジックを定義する関数。required
: 直接呼び出しに認証が必要かどうかを示すブール値。
フローを定義する際に、認証プロバイダを使用します。
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 トークンを指定しなくても、認証済みのフローをテストできます。