การตรวจสอบสิทธิ์โฟลว์

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 ลองมาดูวิธีใช้กัน

  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 จะจัดการการตรวจสอบสิทธิ์สำหรับคำขอที่เข้ามาใหม่โดยอัตโนมัติ ซึ่งควรมีโทเค็นสำหรับผู้ถือในส่วนหัวการให้สิทธิ์ของคำขอ HTTP

การเรียกใช้ขั้นตอนที่ผ่านการตรวจสอบสิทธิ์ในเครื่อง

เมื่อเรียกใช้ขั้นตอนการตรวจสอบสิทธิ์ในเครื่องหรือจากภายในขั้นตอนอื่น คุณจะระบุบริบทการตรวจสอบสิทธิ์ในเครื่องได้โดยใช้ตัวเลือก WithLocalAuth ดังนี้

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

วิธีนี้ช่วยให้คุณทดสอบขั้นตอนที่ตรวจสอบสิทธิ์ได้โดยไม่ต้องระบุโทเค็น Firebase ที่ถูกต้อง