ภูมิหลัง#
ฉันเริ่มสร้าง Logto เพราะฉันสังเกตว่า Identity and Access Management (IAM) ได้ซับซ้อนและขยายตัวมากขึ้นเมื่อเวลาผ่านไป แนวคิดของ IAM ใหญ่พอที่จะทำให้เกิดแนวคิดใหม่ ๆ เช่น WIAM (Workforce IAM) และ CIAM (Customer IAM)
แม้ว่า WIAM และ CIAM จะมีพื้นฐานเดียวกัน แต่พวกเขามีกรณีการใช้งานที่แตกต่างกัน: WIAM มักจะใช้สำหรับผู้ใช้งานภายใน ในขณะที่ CIAM ใช้สำหรับลูกค้าภายนอก
ตัวอย่างบางกรณี:
- WIAM บริษัทของคุณมีระบบเอกลักษณ์รวมสำหรับพนักงาน ดังนั้นทุกคนสามารถใช้บัญชีเดียวกันเพื่อเข้าถึงแหล่งข้อมูลของบริษัท เช่น การสมัครใช้ซอฟท์แวร์ บริการคลาวด์ ฯลฯ
- CIAM ร้านหนังสือออนไลน์ของคุณต้องการระบบเอกลักษณ์ผู้ใช้สำหรับลูกค้าและผู้ขาย ประสบการณ์การลงชื่อเข้าใช้เป็นส่วนสำคัญของการเริ่มต้นลงทะเบียน เนื่องจากมันอยู่ที่จุดสูงสุดของกรวยการเปลี่ยนแปลง
Logto เริ่มต้นด้วย CIAM ด้วยเหตุผลหลากหลาย (เราจะมีบทความอีกชิ้นหนึ่งที่พูดเกี่ยวกับเรื่องนี้) ในระหว่างการพัฒนา เราตระหนักว่าการสร้างความเข้าใจเป็นหนึ่งเดียวกันในทีมจะมีประโยชน์ก่อนที่เราจะนำผลิตภัณฑ์ของเราไปสู่ระดับต่อไป เราหวังว่านี่จะช่วยให้คุณเข้าใจภาพรวมของ IAM ได้ดีขึ้น
เริ่มต้นกันเลย!
พื้นฐานของ CIAM#
ในบทความนี้ เราจะมุ่งเน้นที่แนวคิดพื้นฐานของ CIAM และปัญหาที่เราอาจพบในระหว่างหรือหลังจากการไหลของการยืนยันตัวตน เราจะพูดถึง single sign-on (SSO) และสถานการณ์ที่เกี่ยวข้อง
การยืนยันตัวตนและการอนุญาต#
💡 การยืนยันตัวตนถูกกำหนดตั้งแต่ต้นว่า "คุณคือใคร?" อย่างไรก็ตาม เมื่อพูดถึงเอกลักษณ์ดิจิตอล มันมีความแม่นยำมากขึ้นเมื่อต้องแสดงการยืนยันตัวตนด้วยการ "พิสูจน์ความเป็นเจ้าของเอกลักษณ์" (ขอบคุณ Calm-Card-2424)
หากคุณค้นพบบางสิ่งที่ไม่อยู่ในหมวดหมู่ใดสองนี้ มันอาจไม่จำเป็นต่อธุรกิจเอกลักษณ์
- ตัวอย่างสำหรับการยืนยันตัวตน
- การลงชื่อเข้าใช้ด้วยรหัสผ่าน, การลงชื่อเข้าใช้แบบไม่ใช้รหัสผ่าน, การลงชื่อเข้าใช้ผ่านโซเชียล ฯลฯ
- การยืนยันตัวตนของเครื่องอีกเครื่องหนึ่ง
- ตัวอย่างสำหรับการอนุญาต
- การควบคุมการเข้าถึงตามบทบาท
- การควบคุมการเข้าถึงตามคุณลักษณะ
- ตัวอย่างสำหรับข้อยกเว้น
- ข้อมูลที่ไม่ใช่เอกลักษณ์
- Web hooks
เอกลักษณ์และผู้เช่า#
เอกลักษณ์มักหมายถึงผู้ใช้หรือเครื่อง เมื่อผ่านการยืนยันตัวตนเรียบร้อยแล้ว จะมีการออก ID Token เป็นเอกลักษณ์
พูดได้อีกอย่างหนึ่ง วัตถุประสงค์หลักของการยืนยันตัวตนคือการได้รับเอกลักษณ์
ผู้เช่าคือกลุ่มของเอกลักษณ์:
เมื่อเราพูดถึง "หลายผู้เช่า" เราหมายถึงหลาย Logto อินสแตนซ์ที่แยกเอกลักษณ์จากกัน ในคำอื่นๆ หลาย Logto อินสแตนซ์
โปรดสังเกตว่ามันมีสองระบบเอกลักษณ์ที่ แยกจากกัน กล่าวคือ คุณไม่สามารถใช้เอกลักษณ์ของ Tenant 1 ใน Tenant 2 ได้ แม้จะใช้ตัวระบุเดียวกัน (อีเมล, โทรศัพท์ ฯลฯ) เหมือนเช่นที่สมาชิก Costco ของคุณใช้ที่ Whole Foods ไม่ได้
แอพและผู้เช่า#
เช่นเดียวกับเอกลักษณ์ แอพก็เป็นส่วนหนึ่งของผู้เช่าด้วย มีหลายสิ่งที่ควรจำ:
- โดยทั่วไปจะไม่มีความสัมพันธ์ตรงกันระหว่างแอพกับเอกลักษณ์
- เอกลักษณ์สามารถเป็นตัวแทนของแอพได้ แต่ไม่มีการเชื่อมโยงโดยตรงระหว่างทั้งสอง
- เช่นเดียวกับผู้ใช้ แอพก็อยู่ในระดับผู้เช่า
- แอพคือโค้ด, ในขณะที่ผู้ใช้คือมนุษย์
- วัตถุประสงค์หลักของแอพคือเพื่อทำการยืนยันตัวตนให้สำเร็จ กล่าวคือ เพื่อได้รับเอกลักษณ์
ผู้ให้บริการเอกลักษณ์ (IdP) และผู้ให้บริการ (SP)#
ความแตกต่างระหว่างผู้ให้บริการสองประเภทนี้ค่อนข้างซับซ้อนแต่สำคัญ
- Identity Provider คือบริการที่ให้การยืนยันตัวตน (AuthN) และออกเอกลักษณ์
คุณสามารถหาอธิบายต่าง ๆ เกี่ยวกับผู้ให้บริการจาก Google ถึงแม้ว่ามันอาจจะไม่พอใจเท่าไหร่ ในความคิดของฉัน ผู้ให้บริการคือแนวคิดสัมพัทธ์:
- Service Provider (หรือ ร่วมมือใน OIDC) คือบริการหรือไคลเอนต์ที่เริ่มต้นการยืนยันตัวตน (AuthN) และขอผลลัพธ์จาก Identity Providers
คำถามทดสอบ#
พิจารณาสถานการณ์การลงชื่อเข้าใช้ผ่านโซเชียลทั่วไป:
❓ กี่ผู้ให้บริการและผู้ให้บริการในแผนภาพนี้?
คำตอบ
ทั้งคู่มีสอง iOS App เป็นผู้ให้บริการให้กับ Logto ในขณะที่ Logto เป็นผู้ให้บริการระบุ Logto เป็น
ผู้ให้บริการให้กับ GitHub ในขณะที่ GitHub เป็นผู้ให้บริการเอกลักษณ์ ดังนั้น Logto เป็นผู้ให้บริการ
และเป็นผู้ให้บริการเอกลักษณ์.
กรณีศึกษา: บริษัทโซลูชั่นเทคโนโลยี#
คุณเป็น CTO ของบริษัทโซลูชั่นเทคโนโลยี คุณมีคู่ค้าธุรกิจกว่า 100 รายและคุณได้ส่งมอบโครงการกว่า 300 โครงการ
- แต่ละโครงการเป็นเว็บแอพหรือแอพมือถือที่มีบริการหลังสนับสนุน
- สำหรับแต่ละคู่ค้าธุรกิจ คุณต้องการเปลี่ยนแปลงระบบผู้ใช้เพื่อให้บริการ SSO ข้ามโครงการของพวกเขา
❓ Logto (หรือ CIAM product) จะช่วยได้อย่างไร?
คำตอบ
สร้าง Logto instance สำหรับแต่ละคู่ค้าธุรกิจ แต่ละคู่ค้าถือเป็นผู้เช่า โครงการถูกแมพกับ "Apps" ใน Logto
%3btext-align:center%3b%7d%23mermaid-3 .edgeLabel p%7bbackground-color:rgba(232%2c232%2c232%2c 0.8)%3b%7d%23mermaid-3 .edgeLabel rect%7bopacity:0.5%3bbackground-color:rgba(232%2c232%2c232%2c 0.8)%3bfill:rgba(232%2c232%2c232%2c 0.8)%3b%7d%23mermaid-3 .labelBkg%7bbackground-color:rgba(232%2c 232%2c 232%2c 0.5)%3b%7d%23mermaid-3 .cluster rect%7bfill:%23ffffde%3bstroke:%23aaaa33%3bstroke-width:1px%3b%7d%23mermaid-3 .cluster text%7bfill:%23333%3b%7d%23mermaid-3 .cluster span%7bcolor:%23333%3b%7d%23mermaid-3 div.mermaidTooltip%7bposition:absolute%3btext-align:center%3bmax-width:200px%3bpadding:2px%3bfont-family:arial%2csans-serif%3bfont-size:12px%3bbackground:hsl(80%2c 100%25%2c 96.2745098039%25)%3bborder:1px solid %23aaaa33%3bborder-radius:2px%3bpointer-events:none%3bz-index:100%3b%7d%23mermaid-3 .flowchartTitleText%7btext-anchor:middle%3bfont-size:18px%3bfill:%23333%3b%7d%23mermaid-3 rect.text%7bfill:none%3bstroke-width:0%3b%7d%23mermaid-3 .icon-shape%2c%23mermaid-3 .image-shape%7bbackground-color:rgba(232%2c232%2c232%2c 0.8)%3btext-align:center%3b%7d%23mermaid-3 .icon-shape p%2c%23mermaid-3 .image-shape p%7bbackground-color:rgba(232%2c232%2c232%2c 0.8)%3bpadding:2px%3b%7d%23mermaid-3 .icon-shape rect%2c%23mermaid-3 .image-shape rect%7bopacity:0.5%3bbackground-color:rgba(232%2c232%2c232%2c 0.8)%3bfill:rgba(232%2c232%2c232%2c 0.8)%3b%7d%23mermaid-3 :root%7b--mermaid-font-family:arial%2csans-serif%3b%7d%3c/style%3e%3cg%3e%3cmarker orient='auto' markerHeight='8' markerWidth='8' markerUnits='userSpaceOnUse' refY='5' refX='5' viewBox='0 0 10 10' class='marker flowchart-v2' id='mermaid-3_flowchart-v2-pointEnd'%3e%3cpath style='stroke-width: 1%3b stroke-dasharray: 1%2c 0%3b' class='arrowMarkerPath' d='M 0 0 L 10 5 L 0 10 z'/%3e%3c/marker%3e%3cmarker orient='auto' markerHeight='8' markerWidth='8' markerUnits='userSpaceOnUse' refY='5' refX='4.5' viewBox='0 0 10 10' class='marker flowchart-v2' id='mermaid-3_flowchart-v2-pointStart'%3e%3cpath style='stroke-width: 1%3b stroke-dasharray: 1%2c 0%3b' class='arrowMarkerPath' d='M 0 5 L 10 10 L 10 0 z'/%3e%3c/marker%3e%3cmarker orient='auto' markerHeight='11' markerWidth='11' markerUnits='userSpaceOnUse' refY='5' refX='11' viewBox='0 0 10 10' class='marker flowchart-v2' id='mermaid-3_flowchart-v2-circleEnd'%3e%3ccircle style='stroke-width: 1%3b stroke-dasharray: 1%2c 0%3b' class='arrowMarkerPath' r='5' cy='5' cx='5'/%3e%3c/marker%3e%3cmarker orient='auto' markerHeight='11' markerWidth='11' markerUnits='userSpaceOnUse' refY='5' refX='-1' viewBox='0 0 10 10' class='marker flowchart-v2' id='mermaid-3_flowchart-v2-circleStart'%3e%3ccircle style='stroke-width: 1%3b stroke-dasharray: 1%2c 0%3b' class='arrowMarkerPath' r='5' cy='5' cx='5'/%3e%3c/marker%3e%3cmarker orient='auto' markerHeight='11' markerWidth='11' markerUnits='userSpaceOnUse' refY='5.2' refX='12' viewBox='0 0 11 11' class='marker cross flowchart-v2' id='mermaid-3_flowchart-v2-crossEnd'%3e%3cpath style='stroke-width: 2%3b stroke-dasharray: 1%2c 0%3b' class='arrowMarkerPath' d='M 1%2c1 l 9%2c9 M 10%2c1 l -9%2c9'/%3e%3c/marker%3e%3cmarker orient='auto' markerHeight='11' markerWidth='11' markerUnits='userSpaceOnUse' refY='5.2' refX='-1' viewBox='0 0 11 11' class='marker cross flowchart-v2' id='mermaid-3_flowchart-v2-crossStart'%3e%3cpath style='stroke-width: 2%3b stroke-dasharray: 1%2c 0%3b' class='arrowMarkerPath' d='M 1%2c1 l 9%2c9 M 10%2c1 l -9%2c9'/%3e%3c/marker%3e%3cg class='root'%3e%3cg class='clusters'/%3e%3cg class='edgePaths'%3e%3cpath marker-end='url(%23mermaid-3_flowchart-v2-pointEnd)' style='' class='edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link' id='L_T1_A_0' d='M301.836%2c45.395L261.348%2c52.329C220.859%2c59.263%2c139.883%2c73.132%2c99.395%2c83.566C58.906%2c94%2c58.906%2c101%2c58.906%2c104.5L58.906%2c108'/%3e%3cpath marker-end='url(%23mermaid-3_flowchart-v2-pointEnd)' style='' class='edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link' id='L_T1_B_1' d='M301.836%2c55.79L286.65%2c60.992C271.464%2c66.193%2c241.091%2c76.597%2c225.905%2c85.298C210.719%2c94%2c210.719%2c101%2c210.719%2c104.5L210.719%2c108'/%3e%3cpath marker-end='url(%23mermaid-3_flowchart-v2-pointEnd)' style='' class='edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link' id='L_T1_C_2' d='M362.531%2c62L362.531%2c66.167C362.531%2c70.333%2c362.531%2c78.667%2c362.531%2c86.333C362.531%2c94%2c362.531%2c101%2c362.531%2c104.5L362.531%2c108'/%3e%3cpath marker-end='url(%23mermaid-3_flowchart-v2-pointEnd)' style='' class='edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link' id='L_T1_U1_3' d='M423.227%2c55.432L438.855%2c60.694C454.484%2c65.955%2c485.742%2c76.477%2c501.371%2c85.239C517%2c94%2c517%2c101%2c517%2c104.5L517%2c108'/%3e%3cpath marker-end='url(%23mermaid-3_flowchart-v2-pointEnd)' style='' class='edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link' id='L_T1_U2_4' d='M423.227%2c45.129L465.043%2c52.108C506.859%2c59.086%2c590.492%2c73.043%2c632.309%2c83.522C674.125%2c94%2c674.125%2c101%2c674.125%2c104.5L674.125%2c108'/%3e%3cpath marker-end='url(%23mermaid-3_flowchart-v2-pointEnd)' style='' class='edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link' id='L_T2_D_5' d='M996.945%2c48.78L968.887%2c55.15C940.828%2c61.52%2c884.711%2c74.26%2c856.652%2c84.13C828.594%2c94%2c828.594%2c101%2c828.594%2c104.5L828.594%2c108'/%3e%3cpath marker-end='url(%23mermaid-3_flowchart-v2-pointEnd)' style='' class='edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link' id='L_T2_E_6' d='M1017.538%2c62L1011.35%2c66.167C1005.161%2c70.333%2c992.784%2c78.667%2c986.595%2c86.333C980.406%2c94%2c980.406%2c101%2c980.406%2c104.5L980.406%2c108'/%3e%3cpath marker-end='url(%23mermaid-3_flowchart-v2-pointEnd)' style='' class='edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link' id='L_T2_U21_7' d='M1097.743%2c62L1103.932%2c66.167C1110.12%2c70.333%2c1122.498%2c78.667%2c1128.686%2c86.333C1134.875%2c94%2c1134.875%2c101%2c1134.875%2c104.5L1134.875%2c108'/%3e%3cpath marker-end='url(%23mermaid-3_flowchart-v2-pointEnd)' style='' class='edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link' id='L_T2_U22_8' d='M1118.336%2c48.467L1147.28%2c54.889C1176.224%2c61.311%2c1234.112%2c74.156%2c1263.056%2c84.078C1292%2c94%2c1292%2c101%2c1292%2c104.5L1292%2c108'/%3e%3c/g%3e%3cg class='edgeLabels'%3e%3cg class='edgeLabel'%3e%3cg transform='translate(0%2c 0)' class='label'%3e%3cforeignObject height='0' width='0'%3e%3cdiv style='display: table-cell%3b white-space: nowrap%3b line-height: 1.5%3b max-width: 200px%3b text-align: center%3b' class='labelBkg' xmlns='http://www.w3.org/1999/xhtml'%3e%3cspan class='edgeLabel'%3e%3c/span%3e%3c/div%3e%3c/foreignObject%3e%3c/g%3e%3c/g%3e%3cg class='edgeLabel'%3e%3cg transform='translate(0%2c 0)' class='label'%3e%3cforeignObject height='0' width='0'%3e%3cdiv style='display: table-cell%3b white-space: nowrap%3b line-height: 1.5%3b max-width: 200px%3b text-align: center%3b' class='labelBkg' xmlns='http://www.w3.org/1999/xhtml'%3e%3cspan class='edgeLabel'%3e%3c/span%3e%3c/div%3e%3c/foreignObject%3e%3c/g%3e%3c/g%3e%3cg class='edgeLabel'%3e%3cg transform='translate(0%2c 0)' class='label'%3e%3cforeignObject height='0' width='0'%3e%3cdiv style='display: table-cell%3b white-space: nowrap%3b line-height: 1.5%3b max-width: 200px%3b text-align: center%3b' class='labelBkg' xmlns='http://www.w3.org/1999/xhtml'%3e%3cspan class='edgeLabel'%3e%3c/span%3e%3c/div%3e%3c/foreignObject%3e%3c/g%3e%3c/g%3e%3cg class='edgeLabel'%3e%3cg transform='translate(0%2c 0)' class='label'%3e%3cforeignObject height='0' width='0'%3e%3cdiv style='display: table-cell%3b white-space: nowrap%3b line-height: 1.5%3b max-width: 200px%3b text-align: center%3b' class='labelBkg' xmlns='http://www.w3.org/1999/xhtml'%3e%3cspan class='edgeLabel'%3e%3c/span%3e%3c/div%3e%3c/foreignObject%3e%3c/g%3e%3c/g%3e%3cg class='edgeLabel'%3e%3cg transform='translate(0%2c 0)' class='label'%3e%3cforeignObject height='0' width='0'%3e%3cdiv style='display: table-cell%3b white-space: nowrap%3b line-height: 1.5%3b max-width: 200px%3b text-align: center%3b' class='labelBkg' xmlns='http://www.w3.org/1999/xhtml'%3e%3cspan class='edgeLabel'%3e%3c/span%3e%3c/div%3e%3c/foreignObject%3e%3c/g%3e%3c/g%3e%3cg class='edgeLabel'%3e%3cg transform='translate(0%2c 0)' class='label'%3e%3cforeignObject height='0' width='0'%3e%3cdiv style='display: table-cell%3b white-space: nowrap%3b line-height: 1.5%3b max-width: 200px%3b text-align: center%3b' class='labelBkg' xmlns='http://www.w3.org/1999/xhtml'%3e%3cspan class='edgeLabel'%3e%3c/span%3e%3c/div%3e%3c/foreignObject%3e%3c/g%3e%3c/g%3e%3cg class='edgeLabel'%3e%3cg transform='translate(0%2c 0)' class='label'%3e%3cforeignObject height='0' width='0'%3e%3cdiv style='display: table-cell%3b white-space: nowrap%3b line-height: 1.5%3b max-width: 200px%3b text-align: center%3b' class='labelBkg' xmlns='http://www.w3.org/1999/xhtml'%3e%3cspan class='edgeLabel'%3e%3c/span%3e%3c/div%3e%3c/foreignObject%3e%3c/g%3e%3c/g%3e%3cg class='edgeLabel'%3e%3cg transform='translate(0%2c 0)' class='label'%3e%3cforeignObject height='0' width='0'%3e%3cdiv style='display: table-cell%3b white-space: nowrap%3b line-height: 1.5%3b max-width: 200px%3b text-align: center%3b' class='labelBkg' xmlns='http://www.w3.org/1999/xhtml'%3e%3cspan class='edgeLabel'%3e%3c/span%3e%3c/div%3e%3c/foreignObject%3e%3c/g%3e%3c/g%3e%3cg class='edgeLabel'%3e%3cg transform='translate(0%2c 0)' class='label'%3e%3cforeignObject height='0' width='0'%3e%3cdiv style='display: table-cell%3b white-space: nowrap%3b line-height: 1.5%3b max-width: 200px%3b text-align: center%3b' class='labelBkg' xmlns='http://www.w3.org/1999/xhtml'%3e%3cspan class='edgeLabel'%3e%3c/span%3e%3c/div%3e%3c/foreignObject%3e%3c/g%3e%3c/g%3e%3c/g%3e%3cg class='nodes'%3e%3cg transform='translate(362.53125%2c 35)' id='flowchart-T1-23' class='node default'%3e%3crect height='54' width='121.390625' y='-27' x='-60.6953125' style='' class='basic label-container'/%3e%3cg transform='translate(-30.6953125%2c -12)' style='' class='label'%3e%3crect/%3e%3cforeignObject height='24' width='61.390625'%3e%3cdiv style='display: table-cell%3b white-space: nowrap%3b line-height: 1.5%3b max-width: 200px%3b text-align: center%3b' xmlns='http://www.w3.org/1999/xhtml'%3e%3cspan class='nodeLabel'%3e%3cp%3eTenant 1%3c/p%3e%3c/span%3e%3c/div%3e%3c/foreignObject%3e%3c/g%3e%3c/g%3e%3cg transform='translate(58.90625%2c 139)' id='flowchart-A-24' class='node default'%3e%3crect height='54' width='101.8125' y='-27' x='-50.90625' style='' class='basic label-container'/%3e%3cg transform='translate(-20.90625%2c -12)' style='' class='label'%3e%3crect/%3e%3cforeignObject height='24' width='41.8125'%3e%3cdiv style='display: table-cell%3b white-space: nowrap%3b line-height: 1.5%3b max-width: 200px%3b text-align: center%3b' xmlns='http://www.w3.org/1999/xhtml'%3e%3cspan class='nodeLabel'%3e%3cp%3eApp 1%3c/p%3e%3c/span%3e%3c/div%3e%3c/foreignObject%3e%3c/g%3e%3c/g%3e%3cg transform='translate(210.71875%2c 139)' id='flowchart-B-26' class='node default'%3e%3crect height='54' width='101.8125' y='-27' x='-50.90625' style='' class='basic label-container'/%3e%3cg transform='translate(-20.90625%2c -12)' style='' class='label'%3e%3crect/%3e%3cforeignObject height='24' width='41.8125'%3e%3cdiv style='display: table-cell%3b white-space: nowrap%3b line-height: 1.5%3b max-width: 200px%3b text-align: center%3b' xmlns='http://www.w3.org/1999/xhtml'%3e%3cspan class='nodeLabel'%3e%3cp%3eApp 2%3c/p%3e%3c/span%3e%3c/div%3e%3c/foreignObject%3e%3c/g%3e%3c/g%3e%3cg transform='translate(362.53125%2c 139)' id='flowchart-C-28' class='node default'%3e%3crect height='54' width='101.8125' y='-27' x='-50.90625' style='' class='basic label-container'/%3e%3cg transform='translate(-20.90625%2c -12)' style='' class='label'%3e%3crect/%3e%3cforeignObject height='24' width='41.8125'%3e%3cdiv style='display: table-cell%3b white-space: nowrap%3b line-height: 1.5%3b max-width: 200px%3b text-align: center%3b' xmlns='http://www.w3.org/1999/xhtml'%3e%3cspan class='nodeLabel'%3e%3cp%3eApp 3%3c/p%3e%3c/span%3e%3c/div%3e%3c/foreignObject%3e%3c/g%3e%3c/g%3e%3cg transform='translate(517%2c 139)' id='flowchart-U1-30' class='node default'%3e%3crect height='54' width='107.125' y='-27' x='-53.5625' style='' class='basic label-container'/%3e%3cg transform='translate(-23.5625%2c -12)' style='' class='label'%3e%3crect/%3e%3cforeignObject height='24' width='47.125'%3e%3cdiv style='display: table-cell%3b white-space: nowrap%3b line-height: 1.5%3b max-width: 200px%3b text-align: center%3b' xmlns='http://www.w3.org/1999/xhtml'%3e%3cspan class='nodeLabel'%3e%3cp%3eUser 1%3c/p%3e%3c/span%3e%3c/div%3e%3c/foreignObject%3e%3c/g%3e%3c/g%3e%3cg transform='translate(674.125%2c 139)' id='flowchart-U2-32' class='node default'%3e%3crect height='54' width='107.125' y='-27' x='-53.5625' style='' class='basic label-container'/%3e%3cg transform='translate(-23.5625%2c -12)' style='' class='label'%3e%3crect/%3e%3cforeignObject height='24' width='47.125'%3e%3cdiv style='display: table-cell%3b white-space: nowrap%3b line-height: 1.5%3b max-width: 200px%3b text-align: center%3b' xmlns='http://www.w3.org/1999/xhtml'%3e%3cspan class='nodeLabel'%3e%3cp%3eUser 2%3c/p%3e%3c/span%3e%3c/div%3e%3c/foreignObject%3e%3c/g%3e%3c/g%3e%3cg transform='translate(1057.640625%2c 35)' id='flowchart-T2-33' class='node default'%3e%3crect height='54' width='121.390625' y='-27' x='-60.6953125' style='' class='basic label-container'/%3e%3cg transform='translate(-30.6953125%2c -12)' style='' class='label'%3e%3crect/%3e%3cforeignObject height='24' width='61.390625'%3e%3cdiv style='display: table-cell%3b white-space: nowrap%3b line-height: 1.5%3b max-width: 200px%3b text-align: center%3b' xmlns='http://www.w3.org/1999/xhtml'%3e%3cspan class='nodeLabel'%3e%3cp%3eTenant 2%3c/p%3e%3c/span%3e%3c/div%3e%3c/foreignObject%3e%3c/g%3e%3c/g%3e%3cg transform='translate(828.59375%2c 139)' id='flowchart-D-34' class='node default'%3e%3crect height='54' width='101.8125' y='-27' x='-50.90625' style='' class='basic label-container'/%3e%3cg transform='translate(-20.90625%2c -12)' style='' class='label'%3e%3crect/%3e%3cforeignObject height='24' width='41.8125'%3e%3cdiv style='display: table-cell%3b white-space: nowrap%3b line-height: 1.5%3b max-width: 200px%3b text-align: center%3b' xmlns='http://www.w3.org/1999/xhtml'%3e%3cspan class='nodeLabel'%3e%3cp%3eApp 1%3c/p%3e%3c/span%3e%3c/div%3e%3c/foreignObject%3e%3c/g%3e%3c/g%3e%3cg transform='translate(980.40625%2c 139)' id='flowchart-E-36' class='node default'%3e%3crect height='54' width='101.8125' y='-27' x='-50.90625' style='' class='basic label-container'/%3e%3cg transform='translate(-20.90625%2c -12)' style='' class='label'%3e%3crect/%3e%3cforeignObject height='24' width='41.8125'%3e%3cdiv style='display: table-cell%3b white-space: nowrap%3b line-height: 1.5%3b max-width: 200px%3b text-align: center%3b' xmlns='http://www.w3.org/1999/xhtml'%3e%3cspan class='nodeLabel'%3e%3cp%3eApp 2%3c/p%3e%3c/span%3e%3c/div%3e%3c/foreignObject%3e%3c/g%3e%3c/g%3e%3cg transform='translate(1134.875%2c 139)' id='flowchart-U21-38' class='node default'%3e%3crect height='54' width='107.125' y='-27' x='-53.5625' style='' class='basic label-container'/%3e%3cg transform='translate(-23.5625%2c -12)' style='' class='label'%3e%3crect/%3e%3cforeignObject height='24' width='47.125'%3e%3cdiv style='display: table-cell%3b white-space: nowrap%3b line-height: 1.5%3b max-width: 200px%3b text-align: center%3b' xmlns='http://www.w3.org/1999/xhtml'%3e%3cspan class='nodeLabel'%3e%3cp%3eUser 1%3c/p%3e%3c/span%3e%3c/div%3e%3c/foreignObject%3e%3c/g%3e%3c/g%3e%3cg transform='translate(1292%2c 139)' id='flowchart-U22-40' class='node default'%3e%3crect height='54' width='107.125' y='-27' x='-53.5625' style='' class='basic label-container'/%3e%3cg transform='translate(-23.5625%2c -12)' style='' class='label'%3e%3crect/%3e%3cforeignObject height='24' width='47.125'%3e%3cdiv style='display: table-cell%3b white-space: nowrap%3b line-height: 1.5%3b max-width: 200px%3b text-align: center%3b' xmlns='http://www.w3.org/1999/xhtml'%3e%3cspan class='nodeLabel'%3e%3cp%3eUser 2%3c/p%3e%3c/span%3e%3c/div%3e%3c/foreignObject%3e%3c/g%3e%3c/g%3e%3c/g%3e%3c/g%3e%3c/g%3e%3c/svg%3e)
Logto ให้บริการประสบการณ์การลงชื่อเข้าใช้รวม (หมายถึง SSO) ภายในผู้เช่า ดังนั้นผู้ใช้ไม่จำเป็นต้องลงชื่อเข้าใช้อีกครั้งเมื่อต้องเข้าสู่อีกแอพในผู้เช่าเดียวกันหากพวกเขาลงชื่อเข้าไปแล้ว
เราพูดถึงอะไรเมื่อเราพูดถึง SSO#
เราพบว่าคำว่า “SSO” มักก่อให้เกิดความสับสน เราพิจารณา single sign-on(SSO) เป็นพฤติกรรม ไม่ใช่แนวคิดธุรกิจ ดังนั้น SSO จึงไม่เท่ากับ "SSO ใน WIAM"
เมื่อเราพูดว่า "มันต้องการ SSO" มันสามารถหมายถึงหนึ่งในกรณีต่อไปนี้:
SSO Case 1#
👉🏽 ในบริษัทใหญ่ พนักงานใช้ข้อมูลเข้าสู่ระบบเดียวกันสำหรับทรัพยากรทั้งหมดที่มีใบอนุญาตของบริษัท (เช่น อีเมล, IM, บริการคลาวด์)
มันเป็นกรณี WIAM ทั่วไป ในกรณีนี้ มีเพียงผู้ให้บริการเอกลักษณ์เดียวที่เกี่ยวข้อง ดังนั้นเราจะไม่สนใจในตอนนี้
SSO Case 2#
👉🏽 ผู้ใช้งานสุดท้ายใช้ข้อมูลเข้าสู่ระบบเดียวกันสำหรับทุกบริการที่พัฒนาโดยบริษัทเดียวกัน (เช่น GSuite)
Logto กำลังมุ่งเน้นวิธีการที่อธิบายไว้ข้างต้นนี้ ในขณะนี้อาจมีผู้ให้บริการเอกลักษณ์ภายนอกหลายราย เช่น โซเชียลซ้อคุณภาพสภา (no dataset csrmerasia) Logto ยังคงเป็นแหล่งความจริงสำหรับเอกลักษณ์เพียงใช้ "ยืม" พวกเขามาจากผู้ให้บริการอื่น ในกรณีนี้ Logto ก็เป็นผู้ให้บริการเอกลักษณ์ (ต่อแอพ GSuite) และเป็นผู้ให้บริการ (ต่อผู้ให้บริการเอกลักษณ์ภายนอก)
SSO Case 3#
👉🏽 ผู้ใช้งานสุดท้ายสามารถใช้ผู้ให้บริการเอกลักษณ์ที่เฉพาะเจาะจงกับโดเมนอีเมลที่กำหนดเพื่อทำการตรวจสอบเอกลักษณ์ได้ ตัวอย่างเช่น, การลงชื่อเข้าสู่ Figma ด้วย Google Workspace.
นี่คือกรณีการใช้ SSO ใน CIAM ที่พบมากที่สุด มาดูใกล้ชิดกันหน่อย
ถ้าเราต้องการลงชื่อเข้าใช้ Figma โดยใช้อีเมล @silverhand.io ของเรา เราสามารถเลือกใช้การลงชื่อผ่านโซเชียลหรือ SSO ก็ได้ ตัวเลขด้านล่างแสดงความแตกต่างระหว่างสองวิธี:
%3btext-align:center%3b%7d%23mermaid-4 .edgeLabel p%7bbackground-color:rgba(232%2c232%2c232%2c 0.8)%3b%7d%23mermaid-4 .edgeLabel rect%7bopacity:0.5%3bbackground-color:rgba(232%2c232%2c232%2c 0.8)%3bfill:rgba(232%2c232%2c232%2c 0.8)%3b%7d%23mermaid-4 .labelBkg%7bbackground-color:rgba(232%2c 232%2c 232%2c 0.5)%3b%7d%23mermaid-4 .cluster rect%7bfill:%23ffffde%3bstroke:%23aaaa33%3bstroke-width:1px%3b%7d%23mermaid-4 .cluster text%7bfill:%23333%3b%7d%23mermaid-4 .cluster span%7bcolor:%23333%3b%7d%23mermaid-4 div.mermaidTooltip%7bposition:absolute%3btext-align:center%3bmax-width:200px%3bpadding:2px%3bfont-family:arial%2csans-serif%3bfont-size:12px%3bbackground:hsl(80%2c 100%25%2c 96.2745098039%25)%3bborder:1px solid %23aaaa33%3bborder-radius:2px%3bpointer-events:none%3bz-index:100%3b%7d%23mermaid-4 .flowchartTitleText%7btext-anchor:middle%3bfont-size:18px%3bfill:%23333%3b%7d%23mermaid-4 rect.text%7bfill:none%3bstroke-width:0%3b%7d%23mermaid-4 .icon-shape%2c%23mermaid-4 .image-shape%7bbackground-color:rgba(232%2c232%2c232%2c 0.8)%3btext-align:center%3b%7d%23mermaid-4 .icon-shape p%2c%23mermaid-4 .image-shape p%7bbackground-color:rgba(232%2c232%2c232%2c 0.8)%3bpadding:2px%3b%7d%23mermaid-4 .icon-shape rect%2c%23mermaid-4 .image-shape rect%7bopacity:0.5%3bbackground-color:rgba(232%2c232%2c232%2c 0.8)%3bfill:rgba(232%2c232%2c232%2c 0.8)%3b%7d%23mermaid-4 :root%7b--mermaid-font-family:arial%2csans-serif%3b%7d%3c/style%3e%3cg%3e%3cmarker orient='auto' markerHeight='8' markerWidth='8' markerUnits='userSpaceOnUse' refY='5' refX='5' viewBox='0 0 10 10' class='marker flowchart-v2' id='mermaid-4_flowchart-v2-pointEnd'%3e%3cpath style='stroke-width: 1%3b stroke-dasharray: 1%2c 0%3b' class='arrowMarkerPath' d='M 0 0 L 10 5 L 0 10 z'/%3e%3c/marker%3e%3cmarker orient='auto' markerHeight='8' markerWidth='8' markerUnits='userSpaceOnUse' refY='5' refX='4.5' viewBox='0 0 10 10' class='marker flowchart-v2' id='mermaid-4_flowchart-v2-pointStart'%3e%3cpath style='stroke-width: 1%3b stroke-dasharray: 1%2c 0%3b' class='arrowMarkerPath' d='M 0 5 L 10 10 L 10 0 z'/%3e%3c/marker%3e%3cmarker orient='auto' markerHeight='11' markerWidth='11' markerUnits='userSpaceOnUse' refY='5' refX='11' viewBox='0 0 10 10' class='marker flowchart-v2' id='mermaid-4_flowchart-v2-circleEnd'%3e%3ccircle style='stroke-width: 1%3b stroke-dasharray: 1%2c 0%3b' class='arrowMarkerPath' r='5' cy='5' cx='5'/%3e%3c/marker%3e%3cmarker orient='auto' markerHeight='11' markerWidth='11' markerUnits='userSpaceOnUse' refY='5' refX='-1' viewBox='0 0 10 10' class='marker flowchart-v2' id='mermaid-4_flowchart-v2-circleStart'%3e%3ccircle style='stroke-width: 1%3b stroke-dasharray: 1%2c 0%3b' class='arrowMarkerPath' r='5' cy='5' cx='5'/%3e%3c/marker%3e%3cmarker orient='auto' markerHeight='11' markerWidth='11' markerUnits='userSpaceOnUse' refY='5.2' refX='12' viewBox='0 0 11 11' class='marker cross flowchart-v2' id='mermaid-4_flowchart-v2-crossEnd'%3e%3cpath style='stroke-width: 2%3b stroke-dasharray: 1%2c 0%3b' class='arrowMarkerPath' d='M 1%2c1 l 9%2c9 M 10%2c1 l -9%2c9'/%3e%3c/marker%3e%3cmarker orient='auto' markerHeight='11' markerWidth='11' markerUnits='userSpaceOnUse' refY='5.2' refX='-1' viewBox='0 0 11 11' class='marker cross flowchart-v2' id='mermaid-4_flowchart-v2-crossStart'%3e%3cpath style='stroke-width: 2%3b stroke-dasharray: 1%2c 0%3b' class='arrowMarkerPath' d='M 1%2c1 l 9%2c9 M 10%2c1 l -9%2c9'/%3e%3c/marker%3e%3cg class='root'%3e%3cg class='clusters'/%3e%3cg class='edgePaths'%3e%3cpath marker-end='url(%23mermaid-4_flowchart-v2-pointEnd)' style='' class='edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link' id='L_A_B_0' d='M150.426%2c62L142.383%2c68.167C134.339%2c74.333%2c118.251%2c86.667%2c110.208%2c98.333C102.164%2c110%2c102.164%2c121%2c102.164%2c126.5L102.164%2c132'/%3e%3cpath marker-end='url(%23mermaid-4_flowchart-v2-pointEnd)' style='' class='edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link' id='L_B_C_1' d='M102.164%2c190L102.164%2c196.167C102.164%2c202.333%2c102.164%2c214.667%2c109.679%2c226.594C117.193%2c238.522%2c132.223%2c250.044%2c139.737%2c255.805L147.252%2c261.566'/%3e%3cpath marker-end='url(%23mermaid-4_flowchart-v2-pointEnd)' style='' class='edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link' id='L_C_A_2' d='M220.863%2c264L228.907%2c257.833C236.95%2c251.667%2c253.038%2c239.333%2c261.081%2c222.5C269.125%2c205.667%2c269.125%2c184.333%2c269.125%2c163C269.125%2c141.667%2c269.125%2c120.333%2c261.61%2c103.906C254.096%2c87.478%2c239.067%2c75.956%2c231.552%2c70.195L224.037%2c64.434'/%3e%3c/g%3e%3cg class='edgeLabels'%3e%3cg transform='translate(102.1640625%2c 99)' class='edgeLabel'%3e%3cg transform='translate(-49.6953125%2c -12)' class='label'%3e%3cforeignObject height='24' width='99.390625'%3e%3cdiv style='display: table-cell%3b white-space: nowrap%3b line-height: 1.5%3b max-width: 200px%3b text-align: center%3b' class='labelBkg' xmlns='http://www.w3.org/1999/xhtml'%3e%3cspan class='edgeLabel'%3e%3cp%3eClick 'Sign in'%3c/p%3e%3c/span%3e%3c/div%3e%3c/foreignObject%3e%3c/g%3e%3c/g%3e%3cg transform='translate(102.1640625%2c 227)' class='edgeLabel'%3e%3cg transform='translate(-94.1640625%2c -12)' class='label'%3e%3cforeignObject height='24' width='188.328125'%3e%3cdiv style='display: table-cell%3b white-space: nowrap%3b line-height: 1.5%3b max-width: 200px%3b text-align: center%3b' class='labelBkg' xmlns='http://www.w3.org/1999/xhtml'%3e%3cspan class='edgeLabel'%3e%3cp%3eClick 'Sign in with Google'%3c/p%3e%3c/span%3e%3c/div%3e%3c/foreignObject%3e%3c/g%3e%3c/g%3e%3cg transform='translate(269.125%2c 163)' class='edgeLabel'%3e%3cg transform='translate(-72.0390625%2c -12)' class='label'%3e%3cforeignObject height='24' width='144.078125'%3e%3cdiv style='display: table-cell%3b white-space: nowrap%3b line-height: 1.5%3b max-width: 200px%3b text-align: center%3b' class='labelBkg' xmlns='http://www.w3.org/1999/xhtml'%3e%3cspan class='edgeLabel'%3e%3cp%3eRedirect when finish%3c/p%3e%3c/span%3e%3c/div%3e%3c/foreignObject%3e%3c/g%3e%3c/g%3e%3c/g%3e%3cg class='nodes'%3e%3cg transform='translate(185.64453125%2c 35)' id='flowchart-A-41' class='node default'%3e%3crect height='54' width='118.921875' y='-27' x='-59.4609375' ry='5' rx='5' style='' class='basic label-container'/%3e%3cg transform='translate(-44.4609375%2c -12)' style='' class='label'%3e%3crect/%3e%3cforeignObject height='24' width='88.921875'%3e%3cdiv style='display: table-cell%3b white-space: nowrap%3b line-height: 1.5%3b max-width: 200px%3b text-align: center%3b' xmlns='http://www.w3.org/1999/xhtml'%3e%3cspan class='nodeLabel'%3e%3cp%3eFigma home%3c/p%3e%3c/span%3e%3c/div%3e%3c/foreignObject%3e%3c/g%3e%3c/g%3e%3cg transform='translate(102.1640625%2c 163)' id='flowchart-B-42' class='node default'%3e%3crect height='54' width='119.84375' y='-27' x='-59.921875' ry='5' rx='5' style='' class='basic label-container'/%3e%3cg transform='translate(-44.921875%2c -12)' style='' class='label'%3e%3crect/%3e%3cforeignObject height='24' width='89.84375'%3e%3cdiv style='display: table-cell%3b white-space: nowrap%3b line-height: 1.5%3b max-width: 200px%3b text-align: center%3b' xmlns='http://www.w3.org/1999/xhtml'%3e%3cspan class='nodeLabel'%3e%3cp%3eSign-in page%3c/p%3e%3c/span%3e%3c/div%3e%3c/foreignObject%3e%3c/g%3e%3c/g%3e%3cg transform='translate(185.64453125%2c 291)' id='flowchart-C-43' class='node default'%3e%3crect height='54' width='81.59375' y='-27' x='-40.796875' ry='5' rx='5' style='' class='basic label-container'/%3e%3cg transform='translate(-25.796875%2c -12)' style='' class='label'%3e%3crect/%3e%3cforeignObject height='24' width='51.59375'%3e%3cdiv style='display: table-cell%3b white-space: nowrap%3b line-height: 1.5%3b max-width: 200px%3b text-align: center%3b' xmlns='http://www.w3.org/1999/xhtml'%3e%3cspan class='nodeLabel'%3e%3cp%3eGoogle%3c/p%3e%3c/span%3e%3c/div%3e%3c/foreignObject%3e%3c/g%3e%3c/g%3e%3c/g%3e%3c/g%3e%3c/g%3e%3c/svg%3e)
Social sign-in
%3btext-align:center%3b%7d%23mermaid-5 .edgeLabel p%7bbackground-color:rgba(232%2c232%2c232%2c 0.8)%3b%7d%23mermaid-5 .edgeLabel rect%7bopacity:0.5%3bbackground-color:rgba(232%2c232%2c232%2c 0.8)%3bfill:rgba(232%2c232%2c232%2c 0.8)%3b%7d%23mermaid-5 .labelBkg%7bbackground-color:rgba(232%2c 232%2c 232%2c 0.5)%3b%7d%23mermaid-5 .cluster rect%7bfill:%23ffffde%3bstroke:%23aaaa33%3bstroke-width:1px%3b%7d%23mermaid-5 .cluster text%7bfill:%23333%3b%7d%23mermaid-5 .cluster span%7bcolor:%23333%3b%7d%23mermaid-5 div.mermaidTooltip%7bposition:absolute%3btext-align:center%3bmax-width:200px%3bpadding:2px%3bfont-family:arial%2csans-serif%3bfont-size:12px%3bbackground:hsl(80%2c 100%25%2c 96.2745098039%25)%3bborder:1px solid %23aaaa33%3bborder-radius:2px%3bpointer-events:none%3bz-index:100%3b%7d%23mermaid-5 .flowchartTitleText%7btext-anchor:middle%3bfont-size:18px%3bfill:%23333%3b%7d%23mermaid-5 rect.text%7bfill:none%3bstroke-width:0%3b%7d%23mermaid-5 .icon-shape%2c%23mermaid-5 .image-shape%7bbackground-color:rgba(232%2c232%2c232%2c 0.8)%3btext-align:center%3b%7d%23mermaid-5 .icon-shape p%2c%23mermaid-5 .image-shape p%7bbackground-color:rgba(232%2c232%2c232%2c 0.8)%3bpadding:2px%3b%7d%23mermaid-5 .icon-shape rect%2c%23mermaid-5 .image-shape rect%7bopacity:0.5%3bbackground-color:rgba(232%2c232%2c232%2c 0.8)%3bfill:rgba(232%2c232%2c232%2c 0.8)%3b%7d%23mermaid-5 :root%7b--mermaid-font-family:arial%2csans-serif%3b%7d%3c/style%3e%3cg%3e%3cmarker orient='auto' markerHeight='8' markerWidth='8' markerUnits='userSpaceOnUse' refY='5' refX='5' viewBox='0 0 10 10' class='marker flowchart-v2' id='mermaid-5_flowchart-v2-pointEnd'%3e%3cpath style='stroke-width: 1%3b stroke-dasharray: 1%2c 0%3b' class='arrowMarkerPath' d='M 0 0 L 10 5 L 0 10 z'/%3e%3c/marker%3e%3cmarker orient='auto' markerHeight='8' markerWidth='8' markerUnits='userSpaceOnUse' refY='5' refX='4.5' viewBox='0 0 10 10' class='marker flowchart-v2' id='mermaid-5_flowchart-v2-pointStart'%3e%3cpath style='stroke-width: 1%3b stroke-dasharray: 1%2c 0%3b' class='arrowMarkerPath' d='M 0 5 L 10 10 L 10 0 z'/%3e%3c/marker%3e%3cmarker orient='auto' markerHeight='11' markerWidth='11' markerUnits='userSpaceOnUse' refY='5' refX='11' viewBox='0 0 10 10' class='marker flowchart-v2' id='mermaid-5_flowchart-v2-circleEnd'%3e%3ccircle style='stroke-width: 1%3b stroke-dasharray: 1%2c 0%3b' class='arrowMarkerPath' r='5' cy='5' cx='5'/%3e%3c/marker%3e%3cmarker orient='auto' markerHeight='11' markerWidth='11' markerUnits='userSpaceOnUse' refY='5' refX='-1' viewBox='0 0 10 10' class='marker flowchart-v2' id='mermaid-5_flowchart-v2-circleStart'%3e%3ccircle style='stroke-width: 1%3b stroke-dasharray: 1%2c 0%3b' class='arrowMarkerPath' r='5' cy='5' cx='5'/%3e%3c/marker%3e%3cmarker orient='auto' markerHeight='11' markerWidth='11' markerUnits='userSpaceOnUse' refY='5.2' refX='12' viewBox='0 0 11 11' class='marker cross flowchart-v2' id='mermaid-5_flowchart-v2-crossEnd'%3e%3cpath style='stroke-width: 2%3b stroke-dasharray: 1%2c 0%3b' class='arrowMarkerPath' d='M 1%2c1 l 9%2c9 M 10%2c1 l -9%2c9'/%3e%3c/marker%3e%3cmarker orient='auto' markerHeight='11' markerWidth='11' markerUnits='userSpaceOnUse' refY='5.2' refX='-1' viewBox='0 0 11 11' class='marker cross flowchart-v2' id='mermaid-5_flowchart-v2-crossStart'%3e%3cpath style='stroke-width: 2%3b stroke-dasharray: 1%2c 0%3b' class='arrowMarkerPath' d='M 1%2c1 l 9%2c9 M 10%2c1 l -9%2c9'/%3e%3c/marker%3e%3cg class='root'%3e%3cg class='clusters'/%3e%3cg class='edgePaths'%3e%3cpath marker-end='url(%23mermaid-5_flowchart-v2-pointEnd)' style='' class='edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link' id='L_A_S_0' d='M125.096%2c62L117.438%2c68.167C109.78%2c74.333%2c94.464%2c86.667%2c86.806%2c98.333C79.148%2c110%2c79.148%2c121%2c79.148%2c126.5L79.148%2c132'/%3e%3cpath marker-end='url(%23mermaid-5_flowchart-v2-pointEnd)' style='' class='edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link' id='L_S_B_1' d='M79.148%2c190L79.148%2c196.167C79.148%2c202.333%2c79.148%2c214.667%2c79.148%2c226.333C79.148%2c238%2c79.148%2c249%2c79.148%2c254.5L79.148%2c260'/%3e%3cpath marker-end='url(%23mermaid-5_flowchart-v2-pointEnd)' style='' class='edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link' id='L_B_C_2' d='M79.148%2c318L79.148%2c324.167C79.148%2c330.333%2c79.148%2c342.667%2c79.148%2c354.333C79.148%2c366%2c79.148%2c377%2c79.148%2c382.5L79.148%2c388'/%3e%3cpath marker-end='url(%23mermaid-5_flowchart-v2-pointEnd)' style='' class='edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link' id='L_C_D_3' d='M79.148%2c446L79.148%2c452.167C79.148%2c458.333%2c79.148%2c470.667%2c86.287%2c482.582C93.426%2c494.497%2c107.703%2c505.994%2c114.842%2c511.743L121.98%2c517.491'/%3e%3cpath marker-end='url(%23mermaid-5_flowchart-v2-pointEnd)' style='' class='edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link' id='L_D_A_4' d='M192.154%2c520L199.812%2c513.833C207.47%2c507.667%2c222.786%2c495.333%2c230.444%2c478.5C238.102%2c461.667%2c238.102%2c440.333%2c238.102%2c419C238.102%2c397.667%2c238.102%2c376.333%2c238.102%2c355C238.102%2c333.667%2c238.102%2c312.333%2c238.102%2c291C238.102%2c269.667%2c238.102%2c248.333%2c238.102%2c227C238.102%2c205.667%2c238.102%2c184.333%2c238.102%2c163C238.102%2c141.667%2c238.102%2c120.333%2c230.963%2c103.918C223.824%2c87.503%2c209.547%2c76.006%2c202.408%2c70.257L195.27%2c64.509'/%3e%3c/g%3e%3cg class='edgeLabels'%3e%3cg transform='translate(79.1484375%2c 99)' class='edgeLabel'%3e%3cg transform='translate(-49.6953125%2c -12)' class='label'%3e%3cforeignObject height='24' width='99.390625'%3e%3cdiv style='display: table-cell%3b white-space: nowrap%3b line-height: 1.5%3b max-width: 200px%3b text-align: center%3b' class='labelBkg' xmlns='http://www.w3.org/1999/xhtml'%3e%3cspan class='edgeLabel'%3e%3cp%3eClick 'Sign in'%3c/p%3e%3c/span%3e%3c/div%3e%3c/foreignObject%3e%3c/g%3e%3c/g%3e%3cg transform='translate(79.1484375%2c 227)' class='edgeLabel'%3e%3cg transform='translate(-58.578125%2c -12)' class='label'%3e%3cforeignObject height='24' width='117.15625'%3e%3cdiv style='display: table-cell%3b white-space: nowrap%3b line-height: 1.5%3b max-width: 200px%3b text-align: center%3b' class='labelBkg' xmlns='http://www.w3.org/1999/xhtml'%3e%3cspan class='edgeLabel'%3e%3cp%3eClick 'Use SSO'%3c/p%3e%3c/span%3e%3c/div%3e%3c/foreignObject%3e%3c/g%3e%3c/g%3e%3cg transform='translate(79.1484375%2c 355)' class='edgeLabel'%3e%3cg transform='translate(-71.1484375%2c -12)' class='label'%3e%3cforeignObject height='24' width='142.296875'%3e%3cdiv style='display: table-cell%3b white-space: nowrap%3b line-height: 1.5%3b max-width: 200px%3b text-align: center%3b' class='labelBkg' xmlns='http://www.w3.org/1999/xhtml'%3e%3cspan class='edgeLabel'%3e%3cp%3eEnter email address%3c/p%3e%3c/span%3e%3c/div%3e%3c/foreignObject%3e%3c/g%3e%3c/g%3e%3cg transform='translate(79.1484375%2c 483)' class='edgeLabel'%3e%3cg transform='translate(-29.7890625%2c -12)' class='label'%3e%3cforeignObject height='24' width='59.578125'%3e%3cdiv style='display: table-cell%3b white-space: nowrap%3b line-height: 1.5%3b max-width: 200px%3b text-align: center%3b' class='labelBkg' xmlns='http://www.w3.org/1999/xhtml'%3e%3cspan class='edgeLabel'%3e%3cp%3eRedirect%3c/p%3e%3c/span%3e%3c/div%3e%3c/foreignObject%3e%3c/g%3e%3c/g%3e%3cg transform='translate(238.1015625%2c 291)' class='edgeLabel'%3e%3cg transform='translate(-72.0390625%2c -12)' class='label'%3e%3cforeignObject height='24' width='144.078125'%3e%3cdiv style='display: table-cell%3b white-space: nowrap%3b line-height: 1.5%3b max-width: 200px%3b text-align: center%3b' class='labelBkg' xmlns='http://www.w3.org/1999/xhtml'%3e%3cspan class='edgeLabel'%3e%3cp%3eRedirect when finish%3c/p%3e%3c/span%3e%3c/div%3e%3c/foreignObject%3e%3c/g%3e%3c/g%3e%3c/g%3e%3cg class='nodes'%3e%3cg transform='translate(158.625%2c 35)' id='flowchart-A-46' class='node default'%3e%3crect height='54' width='118.921875' y='-27' x='-59.4609375' ry='5' rx='5' style='' class='basic label-container'/%3e%3cg transform='translate(-44.4609375%2c -12)' style='' class='label'%3e%3crect/%3e%3cforeignObject height='24' width='88.921875'%3e%3cdiv style='display: table-cell%3b white-space: nowrap%3b line-height: 1.5%3b max-width: 200px%3b text-align: center%3b' xmlns='http://www.w3.org/1999/xhtml'%3e%3cspan class='nodeLabel'%3e%3cp%3eFigma home%3c/p%3e%3c/span%3e%3c/div%3e%3c/foreignObject%3e%3c/g%3e%3c/g%3e%3cg transform='translate(79.1484375%2c 163)' id='flowchart-S-47' class='node default'%3e%3crect height='54' width='119.84375' y='-27' x='-59.921875' ry='5' rx='5' style='' class='basic label-container'/%3e%3cg transform='translate(-44.921875%2c -12)' style='' class='label'%3e%3crect/%3e%3cforeignObject height='24' width='89.84375'%3e%3cdiv style='display: table-cell%3b white-space: nowrap%3b line-height: 1.5%3b max-width: 200px%3b text-align: center%3b' xmlns='http://www.w3.org/1999/xhtml'%3e%3cspan class='nodeLabel'%3e%3cp%3eSign-in page%3c/p%3e%3c/span%3e%3c/div%3e%3c/foreignObject%3e%3c/g%3e%3c/g%3e%3cg transform='translate(79.1484375%2c 291)' id='flowchart-B-48' class='node default'%3e%3crect height='54' width='103.828125' y='-27' x='-51.9140625' ry='5' rx='5' style='' class='basic label-container'/%3e%3cg transform='translate(-36.9140625%2c -12)' style='' class='label'%3e%3crect/%3e%3cforeignObject height='24' width='73.828125'%3e%3cdiv style='display: table-cell%3b white-space: nowrap%3b line-height: 1.5%3b max-width: 200px%3b text-align: center%3b' xmlns='http://www.w3.org/1999/xhtml'%3e%3cspan class='nodeLabel'%3e%3cp%3eSSO page%3c/p%3e%3c/span%3e%3c/div%3e%3c/foreignObject%3e%3c/g%3e%3c/g%3e%3cg transform='translate(79.1484375%2c 419)' id='flowchart-C-49' class='node default'%3e%3crect height='54' width='142.046875' y='-27' x='-71.0234375' ry='5' rx='5' style='' class='basic label-container'/%3e%3cg transform='translate(-56.0234375%2c -12)' style='' class='label'%3e%3crect/%3e%3cforeignObject height='24' width='112.046875'%3e%3cdiv style='display: table-cell%3b white-space: nowrap%3b line-height: 1.5%3b max-width: 200px%3b text-align: center%3b' xmlns='http://www.w3.org/1999/xhtml'%3e%3cspan class='nodeLabel'%3e%3cp%3eX (explain later)%3c/p%3e%3c/span%3e%3c/div%3e%3c/foreignObject%3e%3c/g%3e%3c/g%3e%3cg transform='translate(158.625%2c 547)' id='flowchart-D-50' class='node default'%3e%3crect height='54' width='165.78125' y='-27' x='-82.890625' ry='5' rx='5' style='' class='basic label-container'/%3e%3cg transform='translate(-67.890625%2c -12)' style='' class='label'%3e%3crect/%3e%3cforeignObject height='24' width='135.78125'%3e%3cdiv style='display: table-cell%3b white-space: nowrap%3b line-height: 1.5%3b max-width: 200px%3b text-align: center%3b' xmlns='http://www.w3.org/1999/xhtml'%3e%3cspan class='nodeLabel'%3e%3cp%3eGoogle Workspace%3c/p%3e%3c/span%3e%3c/div%3e%3c/foreignObject%3e%3c/g%3e%3c/g%3e%3c/g%3e%3c/g%3e%3c/g%3e%3c/svg%3e)
SSO
ในคำพูด:
- หลังจากลงชื่อเข้าใช้ผ่านโซเชียล ผู้ใช้สามารถตั้งรหัสผ่านหรือเปลี่ยนอีเมลใน Figma ได้อย่างอิสระ
- หลังจาก SSO ผู้ใช้ไม่สามารถตั้งรหัสผ่านหรือเปลี่ยนข้อมูลส่วนตัวใด ๆ รวมถึงอีเมลได้ เนื่องจากเอกลักษณ์ของพวกเขาถูกจัดการโดย Google Workspace
ในกรณีนี้ Logto เป็นทั้งผู้ให้บริการเอกลักษณ์และผู้ให้บริการ ปรากฏว่า SSO ซับซ้อนกว่ากระบวนการลงชื่อเข้าใช้ปกติ ประโยชน์สำหรับเจ้าของเอกลักษณ์คืออะไร?
- การควบคุมแบบรวมศูนย์: เก็บข้อมูลเอกลักษณ์และกระบวนการยืนยันตัวตนในที่เดียว และตรวจสอบให้มั่นใจว่าข้อมูลผู้ใช้อยู่ในสภาพใหม่อยู่เสมอ ไม่จำเป็นต้องเพิ่มหรือลบใบอนุญาตข้ามแอพต่าง ๆ สำหรับการเปลี่ยนแปลง
- ปรับปรุงประสบการณ์ผู้ใช้: เจ้าของเอกลักษณ์ที่ต้องการ SSO มักเป็นบริษัท พนักงานของพวกเขาสามารถใช้ข้อมูลเข้าเดียวกันและเซสชันร่วมกันสำหรับการใช้งานข้ามบริษัท เช่น Figma, Zoom, Slack, ฯลฯ
- เพิ่มความปลอดภัย: คุณอาจได้สังเกตว่าบางบริษัทต้องการวิธีการลงชื่อเข้าใช้ที่เฉพาะเจาะจง เช่น รหัสยืนยันแบบไดนามิก การใช้ SSO สามารถประกันได้ว่าพนักงานทุกคนใช้วิธีการลงชื่อเข้าเข้าเดียวกันสำหรับการเข้าถึงทรัพยากรทั้งหมด
🤔 ฉลาดเหมือนคุณต้องสังเกตว่านี่คือ SSO Case 1 จากมุมมองของ SaaS จริงๆ
ได้เวลาพูดคุยเกี่ยวกับ "X" ในกราฟ SSO แล้ว นี่แสดงถึงกระบวนการที่ Figma เชื่อมต่อโดเมนอีเมลกับผู้ให้บริการเอกลักษณ์เฉพาะ แต่มันทำงานอย่างไร?
การแมพ SSO#
เพราะการร้องขอส่วนใหญ่มาจากลูกค้าบริษัท เราจึงเรียกกระบวนการ "SSO Case 3" จากส่วนที่ผ่านมาเป็น "Enterprise SSO" เพื่อความชัดเจน
เราสามารถคิดแนวทางแก้ปัญหาง่าย ๆ ได้: สร้างการแมพระหว่างโดเมนอีเมลและวิธี SSO แล้วอัปเดตมันด้วยมือ
การดำเนินการของกระบวนการ “X” ตอนนี้ชัดเจน:
🔍 ค้นหาวิธี Enterprise SSO ที่แมพของโดเมนอีเมลที่ให้มา
ดังนั้นหากคุณกำหนดค่า silverhand.io เป็นโดเมนอีเมลที่ถูกต้องที่เชื่อมต่อกับ URL SSO ของ Google Workspace ผู้ใช้ที่พยายามลงชื่อเข้าด้วยอีเมล @silverhand.io จะถูกเปลี่ยนไปที่หน้าลงชื่อของ Google Workspace แทนที่จะถูกประมวลผลในที่
เมื่อคุณมีลูกค้าบริษัทไม่กี่โหลที่ต้องการ Enterprise SSO การจัดการการแมพด้วยมือก็โอเค อย่างไรก็ตามยังมีข้อพิจารณาอื่น ๆ อีก:
- ถ้ามีลูกค้าบริษัทหลายร้อยหรือหลายพัน Enterprise SSO จะทำอย่างไร?
- อะไรคือความสัมพันธ์ระหว่าง “ผู้ใช้ธรรมดา” และ “ผู้ใช้ Enterprise SSO”?
- ข้อมูลควรถูกแยกเก็บระหว่างลูกค้า Enterprise SSO ต่าง ๆ หรือไม่?
- จำเป็นต้องมีแดชบอร์ดให้ผู้ดูแลระบบ Enterprise SSO เพื่อดูผู้ใช้ที่ใช้งาน, บันทึกการตรวจสอบ ฯลฯ หรือไม่?
- จะสามารถหยุดใช้งานบัญชีโดยอัตโนมัติเมื่อผู้ใช้ถูกลบออกจากผู้ให้บริการเอกลักษณ์ Enterprise SSO ได้อย่างไร?
และอีกมากมาย เนื่องจากเกือบทุก Enterprise SSO อิงกับโดเมนอีเมล เราจึงสามารถคิดแนวทางที่ดีกว่าได้อย่างรวดเร็ว:
- หากผู้ใช้สามารถพิสูจน์ความเป็นเจ้าของโดเมนนั้นได้ พวกเขาจะสามารถตั้งค่า enterprise SSO ของโดเมนนั้นได้ด้วยตัวเอง
วิธีการนี้สามารถตอบคำถามแรกสองข้อ:
1. ถ้ามีลูกค้าบริษัทหลายร้อยหรือหลายพัน Enterprise SSO จะทำอย่างไร?
- พวกเขาสามารถกำหนดค่า Enterprise SSO ด้วยตัวเองได้
2. อะไรคือความสัมพันธ์ระหว่าง “ผู้ใช้ธรรมดา” และ “ผู้ใช้ Enterprise SSO”?
- เราเปิดให้ผู้ใช้ทั่วไปเข้าถึงวิธีการลงชื่อทุกวิธีที่สามารถใช้ได้ยกเว้น Enterprise SSO; ในขณะที่จำกัดวิธีการลงชื่อเฉพาะ Enterprise SSO ในผู้ใช้ที่พยายามลงชื่อเข้าด้วยโดเมนที่กำหนด
สำหรับคำถามที่สาม:
3. ข้อมูลควรถูกแยกเก็บระหว่างลูกค้า Enterprise SSO ต่าง ๆ หรือไม่?
- ใช่และไม่ใช่ ได้เวลาพูดถึงองค์กรแล้ว
องค์กร#
เราได้พูดถึงการใช้โดเมนอีเมลเพื่อจดจำวิธี Enterprise SSO ที่เฉพาะเจาะจงในภาษาอื่น ๆ ประการอื่น ๆ ได้แก่คำถามที่ 4 และ 5 ในส่วนที่ผ่านมา หลายปีที่ผ่านมา เป็นที่ยอมรับว่าเครือบริษัท SaaS ที่โดดเด่นได้พัฒนารูปแบบที่ชำนาญเพื่อรับมือกับปัญหาเหล่านี้: องค์กร
กฎระเบียบองค์กร
- องค์กรคือกลุ่มเอกลักษณ์ที่มีขนาดเล็กกว่า Tenant
- องค์กรทั้งหมดเชื่อมโยงกับ Tenant
คุณอาจเห็นคำอื่น ๆ เช่น "พื้นที่ทำงาน", "ทีม" หรือแม้กระทั่ง "เช่า" ในซอฟต์แวร์ เพื่อระบุว่ามันเป็นแนวคิดที่เรากำลังพูดถึงหรือไม่ ตรวจสอบว่ามันแสดงถึง “กลุ่มเอกลักษณ์” หรือไม่
ในบทความนี้ เราจะใช้คำว่า "องค์กร" เพื่อความสม่ำเสมอ
ใน Notion คุณสามารถสร้างและเข้าร่วมพื้นที่ทำงานหลายแห่ง (เช่น องค์กร) ด้วยอีเมลเดียวกันและสลับระหว่างพวกเขาได้ง่าย
สำหรับ Slack ดูเหมือนจะเหมือนกัน แต่เราเชื่อว่ามันใช้เอกลักษณ์ต่างกันเบื้องหลัง เนื่องจากเราต้องสร้างบัญชีใหม่สำหรับพื้นที่ทำงานแต่ละแห่ง

พื้นที่ทำงานของ Slack

พื้นที่ทำงานของ Notion
Notion มี “แผนส่วนตัว” ซึ่งปกติแล้วคือองค์กรภายใน โดยมีผู้ใช้เพียงคนเดียว (คุณ) ภายใน เราไม่ทราบวิธีการใช้งานของ Notion แต่คำอธิบายนี่เป็นที่ยอมรับและเป็นกรณีที่ใช้ได้กับรูปแบบของเรา
แต่ละองค์กรยังมีตัวระบุ โดยทั่วไปเรียกว่า “โดเมนองค์กร”
คำถามทดสอบ#
❓ แอพสามารถสัมพันธ์กับองค์กรได้หรือไม่?
คำตอบ
สามารถ สามารถได้. ตามที่เราได้พูดถึงในตอนต้น แอพสามารถมีเอกลักษณ์ได้ คุณสามารถอธิบายสภาพแวดล้อมทางธุรกิจของกรณีนี้ได้หรือไม่?
คำถามที่เหลืออยู่#
3. ข้อมูลควรถูกแยกเก็บระหว่างลูกค้า Enterprise SSO ต่าง ๆ หรือไม่?
- ใช่: แยกข้อมูลธุรกิจ เช่น ข้อความและเอกสาร ในระดับองค์กร
- ไม่: เก็บเอกลักษณ์เป็นเอกภาพ เนื่องจากพวกเขาไม่จำเป็นต้องสัมพันธ์กับองค์กร
- สังเกตว่ามีนิติบุคคลที่แยกต่างหากสามแห่งที่เกี่ยวข้องที่นี่: เอกลักษณ์, องค์กร, และการตั้งค่า Enterprise SSO; ซึ่งเพิ่มความซับซ้อนอย่างดีเยี่ยม คำถามตัวเองไม่เจาะจงพอ
4. จำเป็นต้องมีแดชบอร์ดให้ผู้ดูแลระบบ Enterprise SSO เพื่อดูผู้ใช้ที่ใช้งาน, บันทึกการตรวจสอบ ฯลฯ หรือไม่?
5. จะสามารถหยุดใช้งานบัญชีโดยอัตโนมัติเมื่อผู้ใช้ถูกลบออกจากผู้ให้บริการเอกลักษณ์ Enterprise SSO ได้อย่างไร?
- การต้องการเหล่านี้มุ่งเน้นที่ธุรกิจมากกว่าและสามารถนำไปใช้ได้ในระดับองค์กร เราจะปล่อยให้พวกเขาเปิดในที่นี้
หมายเหตุสิ้นสุด#
เราได้แนะนำหลายแนวคิด: การยืนยันตัวตน (AuthN), การอนุญาต (AuthZ), เอกลักษณ์, ผู้เช่า, แอพพลิเคชัน, ผู้ให้บริการเอกลักษณ์ (IdP), ผู้ให้บริการ (SP), Single sign-on (SSO), และ Enterprise SSO (องค์กร). อาจใช้เวลาสักครู่ในการทำความเข้าใจทั้งหมด
ขณะที่ฉันเขียนบทความนี้ ฉันสังเหตุว่าแผนที่แพงที่สุดในบริการออนไลน์มักมีฟีเจอร์พิเศษที่เกี่ยวข้องกับการอนุญาต ซึ่งไม่ได้พูดถึงในบทความนี้เลย คุณอาจมีคำถามบางประการเกี่ยวกับการอนุญาต เช่น:
- เราสามารถมอบสิทธิ์ให้ผู้ใช้และตรวจสอบพวกเขาได้อย่างไร?
- ควรใช้รูปแบบการอนุญาตใด?
- แนวทางปฏิบัติที่ดีที่สุดในการใช้รูปแบบการอนุญาตคืออะไร?