Відповіді:
Вони є двома різними протоколами аутентифікації і вони відрізняються на технічному рівні.
Здалеку відмінності починаються, коли користувачі ініціюють аутентифікацію. За допомогою OpenID вхід користувача, як правило, є HTTP-адресою ресурсу, який відповідає за аутентифікацію. З іншого боку, SAML базується на явній довірі між вашим сайтом та постачальником послуг, тому досить рідко приймаються дані з невідомого сайту.
Ідентичності OpenID легко обійти в мережі. Як розробник, ви можете просто прийняти користувачів, що надходять від дуже різних OpenID-провайдерів. З іншого боку, постачальника SAML зазвичай потрібно кодувати заздалегідь, і ви об'єднуєте свою заявку лише з обраними постачальниками посвідчень. Перелік прийнятих постачальників ідентичності OpenID можливо звузити, але я думаю, що це було б проти загальної концепції OpenID.
З OpenID ви приймаєте ідентичності, що надходять з довільних серверів. Хтось стверджує, що є http://someopenid.provider.com/john.smith
. Як ви збираєтеся відповідати цьому користувачеві у вашій базі даних? Якось, наприклад, зберігаючи цю інформацію в новому обліковому записі та розпізнаючи її, коли користувач знову відвідує ваш сайт. Зауважте, що будь-якій іншій інформації про користувача (включаючи його ім’я чи електронну пошту) не можна довіряти!
З іншого боку, якщо явна довіра між вашою заявою та провайдером SAML Id, ви можете отримати повну інформацію про користувача, включаючи ім’я та електронну пошту, і цій інформації можна довіряти саме через довіру. Це означає, що ви схильні вважати, що постачальник ідентифікаторів якимось чином перевірив всю інформацію, і ви можете їй довіряти на рівні програми. Якщо користувачі отримують токени 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 базуються на одній концепції об'єднаної ідентичності. Нижче наведено деякі відмінності між ними.
Відкладаючи технічні деталі в сторону, запізнюючись на вечірку, я розумію, що найбільша різниця між SAML та іншими аутентичними стандартами (включаючи OpenID) полягає в тому, що
SAML вимагає від постачальника даних (IDP) та постачальника послуг (SP), щоб вони знали один одного заздалегідь, попередньо налаштовані , статична автентифікація та авторизація. OpenId (+ Connect) не має такої вимоги.
Це важливо для ВПО, які хочуть повністю контролювати, хто отримує доступ до даних. Частина стандарту полягає в налаштуванні того, що надається конкретним SP.
Наприклад, банк може не бажати, щоб його користувачі отримували доступ до будь-яких послуг, крім деяких заздалегідь визначених (через положення чи інші суворі правила безпеки).
Це не означає, що ID ID OpenId не може застосувати таке обмеження. Реалізатор OpenID може контролювати доступ, але це не мета OpenID.
За винятком попередньо визначених, суворих, статичних, різниця в контролі доступу, концептуально (не технічно), OpenID Connect та SAML схожі.
Підсумок, якщо ви є партнером, ви повинні підтримувати те, що вимагають ваші клієнти:
І SAML, і OpenID можуть виступати провайдером ідентифікації (скорочено IdP), тобто децентралізованим протоколом аутентифікації (ідентифікація єдиного входу).
S ecurity ssertion М arkup L anguage ( SAML ) являє собою набір профілів для обміну даними аутентифікації і авторизації між доменами безпеки. У моделі домену SAML постачальник ідентифікаційних даних є спеціальним типом повноважень аутентифікації. Зокрема, постачальник ідентичності SAML - це системний об'єкт, який видає підтвердження автентифікації спільно з профілем SSO SAML. Надійна сторона, яка споживає ці твердження аутентифікації, називається постачальником послуг SAML. Джерело
Виведення пера ID С кий підключити ( РСІН ) являє собою шар аутентифікації поверх OAuth 2.0, рамка авторизації. Стандарт контролюється Фондом OpenID. OAuth призначений для протоколу авторизації, а не протоколу аутентифікації та OpenID, спеціально розробленого як протокол аутентифікації. OIDC використовує прості веб-маркери JSON (JWT), їх легше споживати через JavaScript.
Сценарій використання випадку:
Використовуйте OAuth, якщо ваші користувачі, можливо, просто захочуть увійти за допомогою Facebook або Twitter. Використовуйте OpenID, якщо ваші користувачі мають шиї, які працюють з власними постачальниками OpenID, оскільки вони "не хочуть, щоб хтось інший володів своєю особою".