OpenID และ SAML ต่างกันอย่างไร
OpenID และ SAML ต่างกันอย่างไร
คำตอบ:
พวกเขาเป็นสองโปรโตคอลที่แตกต่างกันของการตรวจสอบและพวกเขาแตกต่างกันในระดับเทคนิค
จากระยะไกลความแตกต่างเริ่มต้นเมื่อผู้ใช้เริ่มต้นการตรวจสอบความถูกต้อง ด้วย OpenID การเข้าสู่ระบบของผู้ใช้มักจะเป็นที่อยู่ HTTP ของทรัพยากรที่รับผิดชอบการตรวจสอบความถูกต้อง ในทางกลับกัน SAML ขึ้นอยู่กับความไว้วางใจอย่างชัดเจนระหว่างไซต์ของคุณและผู้ให้บริการข้อมูลประจำตัวดังนั้นจึงค่อนข้างแปลกที่จะยอมรับข้อมูลประจำตัวจากไซต์ที่ไม่รู้จัก
ตัวตนของ OpenID นั้นง่ายต่อการท่องเน็ต ในฐานะนักพัฒนาคุณสามารถยอมรับผู้ใช้ที่มาจากผู้ให้บริการ OpenID ที่แตกต่างกันมาก ในทางกลับกันผู้ให้บริการ SAML มักจะต้องมีรหัสล่วงหน้าและคุณรวมแอปพลิเคชันของคุณกับผู้ให้บริการเอกลักษณ์ที่เลือกไว้เท่านั้น เป็นไปได้ที่จะ จำกัด รายชื่อผู้ให้บริการเอกลักษณ์ OpenID ให้แคบลง แต่ฉันคิดว่านี่จะขัดกับแนวคิด OpenID ทั่วไป
ด้วย OpenID คุณยอมรับข้อมูลประจำตัวที่มาจากเซิร์ฟเวอร์โดยพลการ http://someopenid.provider.com/john.smith
การเรียกร้องของคนที่จะ คุณจะจับคู่สิ่งนี้กับผู้ใช้ในฐานข้อมูลของคุณอย่างไร? อย่างใดตัวอย่างเช่นโดยการเก็บข้อมูลนี้ด้วยบัญชีใหม่และรับรู้เมื่อผู้ใช้เยี่ยมชมเว็บไซต์ของคุณอีกครั้ง โปรดทราบว่าข้อมูลอื่น ๆ เกี่ยวกับผู้ใช้ (รวมถึงชื่อหรืออีเมลของเขา) ไม่สามารถเชื่อถือได้!
ในทางตรงกันข้ามหากมีความไว้วางใจอย่างชัดเจนระหว่างแอปพลิเคชันของคุณและ SAML Id Provider คุณสามารถรับข้อมูลทั้งหมดเกี่ยวกับผู้ใช้รวมถึงชื่อและอีเมลและข้อมูลนี้สามารถเชื่อถือได้เพียงเพราะความสัมพันธ์ที่เชื่อถือได้ หมายความว่าคุณมีแนวโน้มที่จะเชื่อว่าผู้ให้บริการรหัสได้ทำการตรวจสอบความถูกต้องของข้อมูลทั้งหมดและคุณสามารถเชื่อถือได้ในระดับแอปพลิเคชัน หากผู้ใช้มาพร้อมกับโทเค็น 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 เกี่ยวข้องกับทั้งสองอย่าง
OpenID และ SAML2 นั้นขึ้นอยู่กับแนวคิดเดียวกันของ federated identity ต่อไปนี้คือความแตกต่างระหว่างพวกเขา ..
สิ่งที่ฉันเข้าใจว่าความแตกต่างที่ใหญ่ที่สุดระหว่าง SAML และมาตรฐานการตรวจสอบอื่น ๆ (inc. OpenID) คือ
SAMLต้องใช้บัตรประจำตัวของผู้ให้บริการ (IDP) และผู้ให้บริการ (SP) รู้ซึ่งกันและกันก่อนที่มือที่กำหนดไว้ล่วงหน้า , คงตรวจสอบและอนุมัติ OpenId (+ Connect) ไม่มีข้อกำหนดเช่นนี้
นี่เป็นสิ่งสำคัญสำหรับ IDP ที่ต้องการการควบคุมอย่างเต็มที่ว่าใครกำลังเข้าถึงข้อมูล ส่วนหนึ่งของมาตรฐานคือการกำหนดค่าสิ่งที่มีให้กับ SP ที่เฉพาะเจาะจง
ตัวอย่างเช่นธนาคารอาจไม่ต้องการให้ผู้ใช้เข้าถึงบริการใด ๆ ยกเว้นบางบริการที่กำหนดไว้ล่วงหน้า (เนื่องจากข้อบังคับหรือกฎความปลอดภัยที่เข้มงวดอื่น ๆ )
นี่ไม่ได้หมายความว่า OpenId IDP ไม่สามารถบังคับใช้ข้อ จำกัด ดังกล่าวได้ เครื่องมือของ OpenID สามารถควบคุมการเข้าถึงได้ แต่นั่นไม่ใช่จุดประสงค์ของ OpenID
นอกเหนือจากความแตกต่างที่กำหนดไว้ล่วงหน้าเข้มงวดคงที่การควบคุมการเข้าถึงแนวคิด (ไม่ใช่ในทางเทคนิค) OpenID ConnectและSAMLนั้นคล้ายคลึงกัน
บรรทัดล่างหากคุณเป็น SP คุณควรสนับสนุนสิ่งที่ลูกค้าของคุณต้องการ:
ทั้ง 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 ของตัวเองเพราะพวกเขา "ไม่ต้องการให้ใครเป็นเจ้าของข้อมูลประจำตัว"