Actions
Logto Actions ช่วยให้คุณสามารถรัน JavaScript ที่เชื่อถือได้ ณ จุดที่กำหนดในโฟลว์การยืนยันตัวตน (Authentication) สคริปต์ Action จะทำงานแบบ synchronous: คำขอการยืนยันตัวตนจะรอผลลัพธ์จากสคริปต์ และผลลัพธ์ของสคริปต์สามารถอัปเดตผู้ใช้หรือกำหนดได้ว่าโฟลว์จะดำเนินต่อหรือไม่
Actions มีประโยชน์เมื่อการตัดสินใจต้องเกิดขึ้นภายในโฟลว์การยืนยันตัวตน (Authentication) กรณีการใช้งานทั่วไป เช่น:
- ย้ายผู้ใช้และรหัสผ่านจากระบบข้อมูลระบุตัวตนเดิมเมื่อผู้ใช้ลงชื่อเข้าใช้ครั้งแรก
- รีเฟรชโปรไฟล์ผู้ใช้หรือข้อมูลเฉพาะแอปก่อนที่ Logto จะเสร็จสิ้นการลงชื่อเข้าใช้
- เรียกใช้บริการภายนอกและนำผลลัพธ์มาใช้กับผู้ใช้ Logto
Actions มีให้ใช้งานใน Logto Cloud Enterprise plans
สคริปต์ Action สามารถมีผลต่อการยืนยันตัวตน (Authentication) และแก้ไขข้อมูลผู้ใช้ได้ เฉพาะผู้ดูแลระบบที่เชื่อถือได้เท่านั้นที่ควรได้รับสิทธิ์ในการดู สร้าง แก้ไข ทดสอบ เปิดใช้งาน หรือ ลบ
ในระบบที่ติดตั้งเอง สคริปต์ Action จะถูกรันภายใน process ของ Logto server พร้อมสิทธิ์ของมัน การให้สิทธิ์แก้ไขหรือทดสอบสคริปต์จึงเทียบเท่ากับการให้สิทธิ์รันโค้ดบนโฮสต์ของ Logto ดังนั้น Admin Console ไม่ควรถูกแชร์กับผู้ใช้ที่ไม่เชื่อถือ ปฏิบัติต่อสคริปต์เสมือนเป็นโค้ดฝั่งเซิร์ฟเวอร์ที่เชื่อถือได้; runtime จะจำกัดเวลาและหน่วยความจำของสคริปต์ แต่ไม่ใช่ขอบเขตความปลอดภัยสำหรับโค้ดที่ไม่เชื่อถือ
Actions อยู่ตรงไหนในโฟลว์การลงชื่อเข้าใช้
ปัจจุบัน Logto มี Action สองประเภท:
| ประเภท Action | เมื่อไหร่ที่รัน | สามารถทำอะไรได้บ้าง |
|---|---|---|
| Post first-factor verification | ระหว่างการลงชื่อเข้าใช้ด้วยรหัสผ่าน เฉพาะเมื่อการตรวจสอบรหัสผ่านภายในของ Logto ล้มเหลว จะไม่ถูกรันเมื่อรหัสผ่านภายในถูกต้อง | ตรวจสอบข้อมูลเข้าสู่ระบบกับระบบเดิม จากนั้นสร้างผู้ใช้ Logto ใหม่หรืออัปเดตผู้ใช้เดิมและย้ายรหัสผ่านที่ส่งมา |
| Post sign-in | หลังจากผู้ใช้ผ่านการยืนยันตัวตน (Authentication) ทุกปัจจัย รวมถึง MFA (ถ้าจำเป็น) และก่อนที่ Logto จะเสร็จสิ้นการลงชื่อเข้าใช้และออกโทเค็น | อัปเดตและเติมข้อมูลผู้ใช้ Logto ที่มีอยู่โดยใช้ context สุดท้ายของการลงชื่อเข้าใช้ |
Action ทั้งสองประเภทจะถูกรันเฉพาะกับ interaction แบบ SignIn ใน Experience API เท่านั้น Post first-factor verification ใช้กับการลงชื่อเข้าใช้ด้วยรหัสผ่านเท่านั้น; ส่วน Post sign-in ไม่ขึ้นกับวิธีการยืนยันตัวตน (Authentication)
โมเดลของสคริปต์
แต่ละประเภท Action จะมีการตั้งค่าหนึ่งชุดและฟังก์ชัน JavaScript ชื่อ runAction หนึ่งตัว:
const runAction = async ({ event, environmentVariables = {} }) => {
// ตรวจสอบ event, ดึงข้อมูลภายนอกถ้าต้องการ, และคืนค่าผลลัพธ์ที่รองรับโดย Action ประเภทนี้
};
payload ประกอบด้วย:
event: เหตุการณ์การยืนยันตัวตน (Authentication) จริง รูปแบบขึ้นกับประเภท ActionenvironmentVariables: ค่าข้อความที่ตั้งค่าสำหรับ Action นี้ ค่านี้จะถูกส่งผ่าน payload ของฟังก์ชัน; จะไม่สามารถเข้าถึงผ่านprocess.env
ตัว editor จะให้ข้อมูล type แต่สคริปต์ที่บันทึกจะถูกรันเป็น JavaScript สคริปต์อาจเป็น async และสามารถใช้ฟังก์ชัน fetch ที่ inject มาเพื่อเรียก API HTTPS ภายนอกได้ ไม่สามารถ import package หรือเข้าถึง global ของ Node.js เช่น require หรือ process
ผลลัพธ์ที่รองรับจะแตกต่างกันไปในแต่ละประเภท Action; โปรดดูหน้าข้อมูลอ้างอิงของแต่ละประเภทก่อนเปิดใช้งาน Action
Actions และ Webhooks
Actions และ Webhooks มีวัตถุประสงค์ต่างกัน:
| Actions | Webhooks | |
|---|---|---|
| การทำงาน | synchronous และอยู่ในโฟลว์การยืนยันตัวตน (Authentication) | asynchronous และอยู่นอกคำขอการยืนยันตัวตน (Authentication) |
| มีผลต่อโฟลว์การยืนยันตัวตน (Authentication) ปัจจุบันหรือไม่ | มี | ไม่มี |
| สามารถแก้ไขผู้ใช้จากผลลัพธ์ได้หรือไม่ | ได้ โดยใช้ user patch ที่รองรับ | ไม่ได้โดยตรง; ผู้รับสามารถเรียก Management API แยกต่างหาก |
| ครอบคลุมเหตุการณ์ | จุดการยืนยันตัวตน (Authentication) ที่เลือกไว้ | เหตุการณ์ interaction และการเปลี่ยนแปลงข้อมูลที่หลากหลาย |
| การใช้งานทั่วไป | การย้ายข้อมูลเข้าสู่ระบบ, enrich โปรไฟล์ก่อนออกโทเค็น | การแจ้งเตือน, การซิงค์ข้อมูล downstream, การวิเคราะห์ |
งานที่เป็น asynchronous ควรอยู่ใน Webhooks ใช้ Action เฉพาะเมื่อ Logto ต้องการผลลัพธ์ก่อนที่การยืนยันตัวตน (Authentication) จะดำเนินต่อได้