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
จะกำหนดตรรกะการให้สิทธิ์ โดยตรวจสอบว่ารหัสผู้ใช้ในบริบทการตรวจสอบสิทธิ์ตรงกับรหัสผู้ใช้อินพุตหรือไม่
การใช้ปลั๊กอินการตรวจสอบสิทธิ์ Firebase
ปลั๊กอินการตรวจสอบสิทธิ์ Firebase มอบวิธีง่ายๆ ในการผสานรวมการตรวจสอบสิทธิ์ Firebase กับขั้นตอน Genkit ลองมาดูวิธีใช้กัน
นำเข้าปลั๊กอิน Firebase
import "github.com/firebase/genkit/go/plugins/firebase"
สร้างผู้ให้บริการการตรวจสอบสิทธิ์ Firebase
firebaseAuth, err := firebase.NewAuth(ctx, policy, required)
ฟังก์ชัน
NewAuth
มีอาร์กิวเมนต์ 3 อาร์กิวเมนต์ctx
: บริบทสำหรับการเริ่มต้น Firebasepolicy
: ฟังก์ชันที่กำหนดตรรกะการให้สิทธิ์required
: บูลีนที่ระบุว่าต้องมีการตรวจสอบสิทธิ์สำหรับการโทรโดยตรงหรือไม่
ใช้ผู้ให้บริการการตรวจสอบสิทธิ์เมื่อกำหนดขั้นตอนดังนี้
genkit.DefineFlow("secureUserFlow", userDataFunc, genkit.WithFlowAuth(firebaseAuth))
การจัดการการตรวจสอบสิทธิ์ในคำขอ HTTP
เมื่อใช้งานโฟลว์ของคุณเป็นปลายทาง HTTP ปลั๊กอินการตรวจสอบสิทธิ์ Firebase จะจัดการการตรวจสอบสิทธิ์สำหรับคำขอที่เข้ามาใหม่โดยอัตโนมัติ ซึ่งควรมีโทเค็นสำหรับผู้ถือในส่วนหัวการให้สิทธิ์ของคำขอ HTTP
การเรียกใช้ขั้นตอนที่ผ่านการตรวจสอบสิทธิ์ในเครื่อง
เมื่อเรียกใช้ขั้นตอนการตรวจสอบสิทธิ์ในเครื่องหรือจากภายในขั้นตอนอื่น คุณจะระบุบริบทการตรวจสอบสิทธิ์ในเครื่องได้โดยใช้ตัวเลือก WithLocalAuth
ดังนี้
response, err := authenticatedFlow.Run(ctx, "user123",
genkit.WithLocalAuth(map[string]any{"UID": "user123"}))
วิธีนี้ช่วยให้คุณทดสอบขั้นตอนที่ตรวจสอบสิทธิ์ได้โดยไม่ต้องระบุโทเค็น Firebase ที่ถูกต้อง