ข้ามไปยังเนื้อหาหลัก

กำหนดค่าแอตทริบิวต์ SAML assertion

แอตทริบิวต์ SAML เป็นองค์ประกอบสำคัญของ SAML assertion ที่บรรจุข้อมูลเฉพาะเกี่ยวกับผู้ใช้ที่ได้รับการยืนยันตัวตน แอตทริบิวต์เหล่านี้อาจรวมถึงตัวระบุผู้ใช้ (user identifiers), บทบาท (Roles), สิทธิ์ (Permissions) และข้อมูลผู้ใช้อื่น ๆ ที่ Service Provider (SP) อาจต้องใช้เพื่อการอนุญาต (Authorization) และการปรับแต่งประสบการณ์ผู้ใช้

ทำความเข้าใจแอตทริบิวต์ SAML​

ในกระบวนการยืนยันตัวตน SAML:

  • แอตทริบิวต์คือคู่ชื่อ-ค่า (name-value pairs) ที่มีข้อมูลผู้ใช้
  • แอตทริบิวต์จะถูกรวมอยู่ใน SAML assertion ที่ส่งจาก Identity Provider (Logto) ไปยัง Service Provider
  • แอตทริบิวต์ช่วยให้ Service Provider ตัดสินใจเกี่ยวกับการเข้าถึงและการปรับแต่งประสบการณ์ผู้ใช้ได้อย่างเหมาะสม
การแมปแอตทริบิวต์ของแอป SAML

การแมปแอตทริบิวต์ใน Logto​

การแมปแอตทริบิวต์ช่วยให้คุณกำหนดได้ว่าข้อมูลผู้ใช้จาก Logto ควรถูกแมปไปยังแอตทริบิวต์ใดใน SAML assertion การแมปนี้ช่วยให้ Service Provider ของคุณได้รับข้อมูลผู้ใช้ในรูปแบบและชื่อแอตทริบิวต์ที่คาดหวัง

เมื่อคุณกำหนดการแมปแอตทริบิวต์:

  1. คุณระบุว่าคุณสมบัติผู้ใช้ใดจาก Logto ที่ควรรวมอยู่ใน SAML assertion
  2. คุณกำหนดชื่อแอตทริบิวต์แบบกำหนดเองที่ Service Provider ของคุณต้องการ
  3. แอตทริบิวต์ที่ถูกแมปจะถูกรวมใน SAML assertion โดยอัตโนมัติระหว่างการยืนยันตัวตน

แอตทริบิวต์ที่ใช้บ่อย​

แอตทริบิวต์ SAML ที่ใช้บ่อย ได้แก่:

  • Sub (User ID)
  • Email
  • Organizations (องค์กร)
  • Name
  • Preferred username

ดูข้อมูลผู้ใช้ทั้งหมดที่มีใน Logto

การกำหนดการแมปแอตทริบิวต์อย่างถูกต้องจะช่วยให้ Service Provider ของคุณได้รับข้อมูลผู้ใช้ที่จำเป็นทั้งหมดเพื่อให้การเข้าถึงและการปรับแต่งประสบการณ์ผู้ใช้เหมาะสม

คุณสามารถแมปข้อมูลผู้ใช้ทั้งหมดที่มีใน Logto ไปยังแอตทริบิวต์ที่ SP ของคุณต้องการได้โดยใช้การตั้งค่าการแมปแอตทริบิวต์

แอตทริบิวต์คงที่ (Static attributes)​

Service Provider บางรายคาดหวังแอตทริบิวต์ที่มีค่าเดียวกันสำหรับผู้ใช้ทุกคน เช่น ID ที่ระบุบัญชีหรือไซต์ของคุณในฝั่ง Service Provider แอตทริบิวต์คงที่คือคู่ชื่อ-ค่าคงที่ที่ Logto จะเพิ่มใน SAML assertion ของแอปพลิเคชันทุกครั้ง ร่วมกับแอตทริบิวต์ผู้ใช้ที่ถูกแมป

ตัวอย่างเช่น การเชื่อมต่อ NetSuite SuiteCommerce อาจต้องการแอตทริบิวต์ account และ site:

ชื่อแอตทริบิวต์ค่า
accountNetSuite account ID ของคุณ
siteWebsite ID ของคุณ

กำหนดค่าแอตทริบิวต์คงที่ใน Console​

  1. ไปที่ Console > Applications และเปิดแอป SAML ของคุณ
  2. เปิดแท็บ Attribute mappings และค้นหาการ์ด Static attributes ใต้ Base attribute mappings
  3. กรอกชื่อแอตทริบิวต์ใน Key และค่าของมันใน Value คลิก Add another เพื่อเพิ่มแอตทริบิวต์เพิ่มเติม หากต้องการลบแอตทริบิวต์ล่าสุด ให้ลบ key และ value ของแถวนั้นออก
  4. คลิก Save changes

กำหนดค่าแอตทริบิวต์คงที่ด้วย Management API​

ตั้งค่า staticAttributes เมื่อคุณ สร้าง หรือ อัปเดต แอป SAML ด้วย Management API:

curl \
--request PATCH \
--header 'Authorization: Bearer <access-token>' \
--header 'Content-Type: application/json' \
--data '{"staticAttributes": {"account": "<your-account-id>", "site": "<your-site-id>"}}' \
'https://[tenant-id].logto.app/api/saml-applications/<application-id>'

การอัปเดตที่มี staticAttributes จะเป็นการแทนที่อ็อบเจกต์ทั้งหมด ดังนั้นให้รวมทุกแอตทริบิวต์คงที่ที่คุณต้องการเก็บไว้ หากไม่ต้องการเปลี่ยนแปลง ให้ละเว้นฟิลด์นี้ หรือส่ง {} เพื่อลบทั้งหมด

กฎสำหรับแอตทริบิวต์คงที่​

  • ชื่อแอตทริบิวต์สามารถมีตัวอักษร ASCII, ตัวเลข และอักขระ _ - . : / # @ ดังนั้นชื่อ URI และ OID เช่น http://schemas.example.com/claims/site หรือ urn:oid:1.3.6.1.4.1.5923.1.1.1.6 จึงได้รับการยอมรับ
  • แต่ละแอตทริบิวต์คงที่ต้องมีค่าเป็นสตริงที่ไม่ว่างเปล่าเพียงค่าเดียว
  • ชื่อต้องไม่ซ้ำกันระหว่างกันเองหรือกับชื่อแอตทริบิวต์ผู้ใช้ใน assertion: คือชื่อในคอลัมน์ Value name of your application ของการแมปแอตทริบิวต์ หรือ sub, email และ name เมื่อไม่มีการแมป Logto จะเปรียบเทียบชื่อหลังจากแปลงเป็น camel case โดยใช้ ., _ และ - เป็นตัวแบ่งคำ เช่น site_id, site.id และ SiteId จะถือว่าซ้ำกัน เช่นเดียวกับ account และ Account การตรวจสอบนี้จะทำงานเมื่อคุณเปลี่ยนการแมปแอตทริบิวต์ หากบันทึกแล้วพบว่าซ้ำกัน ให้เปลี่ยนชื่อแอตทริบิวต์ใดแอตทริบิวต์หนึ่ง

แอตทริบิวต์ทั้งหมดใน assertion ทั้งที่ถูกแมปและคงที่ จะใช้ NameFormat urn:oasis:names:tc:SAML:2.0:attrname-format:basic และถูกส่งเป็นค่า xs:string หาก Service Provider ของคุณคาดหวังชื่อ URI หรือ OID พร้อม NameFormat urn:oasis:names:tc:SAML:2.0:attrname-format:uri โปรดตรวจสอบว่ารองรับ basic ด้วย