OpenID และ SAML ต่างกันอย่างไร


คำตอบ:


162

OpenID 2.0 ดั้งเดิมกับ SAML

พวกเขาเป็นสองโปรโตคอลที่แตกต่างกันของการตรวจสอบและพวกเขาแตกต่างกันในระดับเทคนิค

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

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

ด้วย OpenID คุณยอมรับข้อมูลประจำตัวที่มาจากเซิร์ฟเวอร์โดยพลการ http://someopenid.provider.com/john.smithการเรียกร้องของคนที่จะ คุณจะจับคู่สิ่งนี้กับผู้ใช้ในฐานข้อมูลของคุณอย่างไร? อย่างใดตัวอย่างเช่นโดยการเก็บข้อมูลนี้ด้วยบัญชีใหม่และรับรู้เมื่อผู้ใช้เยี่ยมชมเว็บไซต์ของคุณอีกครั้ง โปรดทราบว่าข้อมูลอื่น ๆ เกี่ยวกับผู้ใช้ (รวมถึงชื่อหรืออีเมลของเขา) ไม่สามารถเชื่อถือได้!

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

OpenID Connect เทียบกับ SAML

(ส่วนที่เพิ่ม 07-2017, ขยาย 08-2018)

คำตอบนี้วันปี 2011 และในช่วงเวลานั้น OpenID ยืนOpenID 2.0 ต่อมาบางแห่งในปี 2012 OAuth2.0ได้รับการเผยแพร่และในปี 2014 OpenID Connect (รายละเอียดเพิ่มเติมไทม์ไลน์ที่นี่ )

สำหรับทุกคนที่อ่านวันนี้ - OpenID Connect นั้นไม่เหมือนกันกับ OpenID คำตอบเดิมหมายถึงแต่เป็นชุดของส่วนขยายของ OAuth2.0

ในขณะที่คำตอบนี้สามารถลดแสงจากมุมมองแนวคิดรุ่นที่รัดกุมมากสำหรับคนที่มากับพื้นหลัง OAuth2.0 คือ OpenID Connect นั้นเป็นจริง OAuth2.0 แต่มันเพิ่มวิธีมาตรฐานในการสอบถามข้อมูลผู้ใช้หลังจากโทเค็นการเข้าถึง สามารถใช้ได้.

อ้างถึงคำถามเดิม - ความแตกต่างหลักระหว่าง OpenID Connect (OAuth2.0) และ SAML คือวิธีสร้างความสัมพันธ์ที่เชื่อถือได้ระหว่างแอปพลิเคชันและผู้ให้บริการเอกลักษณ์:

  • SAML สร้างความสัมพันธ์ที่เชื่อถือได้บนลายเซ็นดิจิทัล, โทเค็น SAML ที่ออกโดยผู้ให้บริการข้อมูลประจำตัวนั้นลงนาม XML, แอปพลิเคชันตรวจสอบลายเซ็นของตัวเองและใบรับรองที่นำเสนอ ข้อมูลผู้ใช้จะรวมอยู่ในโทเค็น SAML รวมถึงข้อมูลอื่น ๆ

  • OAuth2 สร้างความสัมพันธ์ที่เชื่อถือได้บนการโทร HTTP โดยตรงจากแอปพลิเคชันไปยังข้อมูลประจำตัว การร้องขอประกอบด้วยโทเค็นการเข้าถึง (ได้รับโดยแอปพลิเคชันระหว่างโฟลว์โพรโทคอล) และการตอบกลับมีข้อมูลเกี่ยวกับผู้ใช้

  • OpenID Connect จะขยายส่วนเพิ่มเติมนี้เพื่อให้สามารถรับข้อมูลประจำตัวได้โดยไม่ต้องมีขั้นตอนเพิ่มเติมที่เกี่ยวข้องกับการโทรจากแอปพลิเคชันไปยังผู้ให้บริการข้อมูลประจำตัว แนวคิดนี้ขึ้นอยู่กับความจริงที่ว่าผู้ให้บริการ OpenID Connect ในความเป็นจริงจะมีการออกโทเค็นสองโทเค็นaccess_tokenปัญหา OAuth2.0 เดียวกันและที่ใหม่id_tokenซึ่งเป็นโทเค็นJWT ที่ลงชื่อโดยผู้ให้บริการเอกลักษณ์ แอปพลิเคชันสามารถใช้id_tokenเพื่อสร้างเซสชันโลคัลโดยขึ้นอยู่กับการอ้างสิทธิ์ที่รวมอยู่ในโทเค็น JWT แต่id_token ไม่สามารถใช้เพื่อสอบถามบริการอื่น ๆ เพิ่มเติมการโทรไปยังบริการของบุคคลที่สามควรยังคงใช้access_token. คุณสามารถนึกถึง OpenID Connect จากนั้นเป็นไฮบริดระหว่าง SAML2 (โทเค็นที่เซ็นชื่อ) และ OAuth2 (โทเค็นการเข้าถึง) เนื่องจาก OpenID Connect เกี่ยวข้องกับทั้งสองอย่าง


12
แนวคิดของ "ความไว้วางใจ" มีความสำคัญมากในวัฒนธรรม SAML เนื่องจากมาจากวัฒนธรรมของสหพันธ์ ในการรวม SAML บัญชีควรมีความสัมพันธ์แบบ 1: 1 กับบุคคลเดียวที่มีความสัมพันธ์ปัจจุบันกับ IdP "การยืนยัน" ทั้งการตรวจสอบผู้ใช้และการอนุญาต องค์กรที่ดำเนินงาน IdP ในสหพันธรัฐจะต้องปฏิบัติตามการกำกับดูแลเกี่ยวกับสกุลเงินของบัญชีและการตรวจสอบ เพื่อแสดงให้เห็นว่าการยกเลิกบัญชีและบัญชีตามบทบาท (อาจได้รับอนุญาต) อาจเป็นส่วนที่แตกต่างกันโดยเฉพาะ นอกจากนี้ SAML ยังมี 'enterprisey' มากขึ้นเรื่อย ๆ และ OpenID เป็น 'webby' มากขึ้น
Cameron Kerr

90

OpenID และ SAML2 นั้นขึ้นอยู่กับแนวคิดเดียวกันของ federated identity ต่อไปนี้คือความแตกต่างระหว่างพวกเขา ..

  1. SAML2 รองรับการลงชื่อออกครั้งเดียว - แต่ OpenID ไม่รองรับ
  2. ผู้ให้บริการ SAML2 นั้นเชื่อมโยงกับ SAML2 Identity Providers แต่ OpenID ที่ใช้งานอยู่นั้นไม่ได้อยู่คู่กับ OpenID Providers OpenID มีโปรโตคอลการค้นพบซึ่งค้นพบผู้ให้บริการ OpenID ที่เกี่ยวข้องแบบไดนามิกเมื่อได้รับ OpenID SAML มีโปรโตคอลการค้นหาที่อิงตามโปรโตคอลการบริการการค้นหาผู้ให้บริการข้อมูลประจำตัว
  3. ด้วย SAML2 ผู้ใช้จะถูกรวมเข้ากับ SAML2 IdP - ตัวระบุ SAML2 ของคุณจะใช้ได้สำหรับ SAML2 IdP ที่ออกให้เท่านั้น แต่ด้วย OpenID คุณเป็นเจ้าของตัวระบุและคุณสามารถแมปกับผู้ให้บริการ OpenID ที่คุณต้องการ
  4. SAML2 มีการเชื่อมโยงที่แตกต่างกันในขณะที่ OpenID ที่มีผลผูกพันเพียงอย่างเดียวคือ HTTP
  5. SAML2 สามารถเป็นผู้ให้บริการ (SP) ที่เริ่มต้นหรือผู้ให้บริการข้อมูลประจำตัว (IdP) ที่เริ่มต้น แต่ OpenID SP จะเริ่มต้นเสมอ
  6. SAML 2 ขึ้นอยู่กับ XML ในขณะที่ OpenID ไม่ได้เป็น
  7. แอพพลิเคชั่นส่วนใหญ่ที่พัฒนาใน 3 ปีที่ผ่านมารองรับ OpenID Connect เท่านั้น
  8. 92% ของการร้องขอการรับรองความถูกต้อง 8B + ที่ Microsoft Azure AD ส่งมอบในเดือนพฤษภาคม 2018 นั้นมาจากแอปพลิเคชันที่เปิดใช้งาน OpenID Connect

1
2. ไม่จำเป็นว่า: SP สามารถเชื่อถือข้อมูลเฉพาะตัวได้จาก IP เฉพาะ แต่ยอมรับการสนับสนุน IP ใด ๆ เป็นค่าเริ่มต้นและแนะนำกับ OpenID
Oliv

หากคุณใช้ไลบรารี SAML แบบโอเพนซอร์สใด ๆ ไม่ว่าจะเป็น okta หรือ onelogin คุณสามารถใช้ห้องสมุดสำหรับทั้งผู้ให้บริการเอกลักษณ์หรือคุณต้องใช้ห้องสมุดที่แตกต่างกัน
Blankman

16

สิ่งที่ฉันเข้าใจว่าความแตกต่างที่ใหญ่ที่สุดระหว่าง SAML และมาตรฐานการตรวจสอบอื่น ๆ (inc. OpenID) คือ

SAMLต้องใช้บัตรประจำตัวของผู้ให้บริการ (IDP) และผู้ให้บริการ (SP) รู้ซึ่งกันและกันก่อนที่มือที่กำหนดไว้ล่วงหน้า , คงตรวจสอบและอนุมัติ OpenId (+ Connect) ไม่มีข้อกำหนดเช่นนี้

นี่เป็นสิ่งสำคัญสำหรับ IDP ที่ต้องการการควบคุมอย่างเต็มที่ว่าใครกำลังเข้าถึงข้อมูล ส่วนหนึ่งของมาตรฐานคือการกำหนดค่าสิ่งที่มีให้กับ SP ที่เฉพาะเจาะจง

ตัวอย่างเช่นธนาคารอาจไม่ต้องการให้ผู้ใช้เข้าถึงบริการใด ๆ ยกเว้นบางบริการที่กำหนดไว้ล่วงหน้า (เนื่องจากข้อบังคับหรือกฎความปลอดภัยที่เข้มงวดอื่น ๆ )

นี่ไม่ได้หมายความว่า OpenId IDP ไม่สามารถบังคับใช้ข้อ จำกัด ดังกล่าวได้ เครื่องมือของ OpenID สามารถควบคุมการเข้าถึงได้ แต่นั่นไม่ใช่จุดประสงค์ของ OpenID

นอกเหนือจากความแตกต่างที่กำหนดไว้ล่วงหน้าเข้มงวดคงที่การควบคุมการเข้าถึงแนวคิด (ไม่ใช่ในทางเทคนิค) OpenID ConnectและSAMLนั้นคล้ายคลึงกัน

บรรทัดล่างหากคุณเป็น SP คุณควรสนับสนุนสิ่งที่ลูกค้าของคุณต้องการ:

  1. หากลูกค้าของคุณเป็นลูกค้าผู้ใช้ปลายทาง (เช่นใช้ google id ของพวกเขา) ให้ลืม SAML ใช้การเชื่อมต่อ OpenID
  2. หากลูกค้าของคุณเป็นธนาคารที่ต้องการให้พนักงานใช้บริการของคุณและส่งออกรายการข้อมูลคงที่เท่านั้นที่จะให้บริการของคุณธนาคารอาจต้องการให้คุณสนับสนุน SAML ธนาคารอาจมีการใช้งาน OpenID พร้อมข้อ จำกัด ของลูกค้าซึ่งจะเป็นวันโชคดีของคุณ :)

1
นี่เป็นวิธีที่ง่ายที่สุดในการวาง ตัวอย่างที่ดีขอบคุณสำหรับคำอธิบาย!
BBK

10

ทั้ง SAML และ OpenID สามารถทำหน้าที่เป็นผู้ให้บริการข้อมูลประจำตัว (IdP ย่อ) เช่นโปรโตคอลการพิสูจน์ตัวตนแบบกระจายอำนาจ (identity sign-on เดียว)

S ecurity ssertion M arkup L anguage ( SAML ) เป็นชุดของโปรไฟล์สำหรับการแลกเปลี่ยนตรวจสอบและอนุมัติข้อมูลข้ามโดเมนการรักษาความปลอดภัย ในโมเดลโดเมน SAML ผู้ให้บริการระบุเอกลักษณ์เป็นผู้มีอำนาจในการตรวจสอบสิทธิ์ชนิดพิเศษ โดยเฉพาะผู้ให้บริการเอกลักษณ์ SAML คือเอนทิตีระบบที่ออกใบรับรองการตรวจสอบสิทธิ์ร่วมกับโปรไฟล์ SSO ของ SAML ฝ่ายที่ต้องพึ่งพาซึ่งใช้การรับรองความถูกต้องเหล่านี้เรียกว่าผู้ให้บริการ SAML แหล่ง

O pen ID C onnect ( OIDC ) เป็นเลเยอร์การตรวจสอบสิทธิ์ที่ด้านบนของ OAuth 2.0 ซึ่งเป็นเฟรมเวิร์กการอนุญาต มาตรฐานถูกควบคุมโดยมูลนิธิ OpenID OAuth ใช้สำหรับโปรโตคอลการอนุญาตมากกว่าโปรโตคอลการตรวจสอบสิทธิ์และ OpenID ที่ออกแบบมาเป็นพิเศษสำหรับโปรโตคอลการตรวจสอบสิทธิ์ OIDC ใช้ JSON Web Tokens (JWT) ง่ายๆใช้ JavaScript ได้ง่ายกว่า

ใช้กรณีสถานการณ์:

ใช้ OAuth หากผู้ใช้ของคุณอาจต้องการลงชื่อเข้าใช้ด้วย Facebook หรือ Twitter ใช้ OpenID หากผู้ใช้ของคุณเป็นคอที่เรียกใช้ผู้ให้บริการ OpenID ของตัวเองเพราะพวกเขา "ไม่ต้องการให้ใครเป็นเจ้าของข้อมูลประจำตัว"

ป้อนคำอธิบายรูปภาพที่นี่
แหล่ง


นี่เป็นคำตอบที่สับสน คุณอธิบายว่า "openID connect" ถูกต้องในข้อความ แต่ไม่ได้ระบุ openID การเชื่อมต่อ Open ID ไม่ใช่ OpenID
Tomm P
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.