SAML vs об'єднаний логін із OAuth


100

Яка різниця між SAML та федеральним входом у систему OAuth? Яке рішення має більше сенсу, якщо компанія хоче використовувати сторонній веб-пакет, а також бажає одноразового входу та бути органом аутентифікації?

Відповіді:


128

Вони вирішують різні проблеми.

SAML - це набір стандартів, визначених для обміну інформацією про те, хто є користувачем, яким є його набір атрибутів, і дати вам спосіб надати / заборонити доступ до чогось або навіть запитати автентифікацію.

OAuth більше стосується делегування доступу до чогось. Ви в основному дозволяєте комусь «діяти» як ви. Його найчастіше використовують для надання доступу до програм, які можуть зробити щось від вашого імені.

Це дві абсолютно різні речі.


Деякі приклади, які можуть допомогти.

OAuth подумайте про щебетання. Скажімо, ви використовуєте Google Buzz та Twitter, і ви хочете написати додаток, щоб вони могли зберігати синхронізацію. Ви в основному можете встановити довіру між вашим додатком та щебетачем. Перший раз, коли ви перейдете на зв'язок програми з твіттером, ви робите класичну підказку для входу в твіттер, а потім з'являється вікно підтвердження і запитує "Чи бажаєте ви надати доступ до" вашого імені програми "?" як тільки ви натиснете "так", довіра була встановлена, і тепер ваш додаток може діяти як ви в Twitter. Він може читати ваші публікації, а також створювати нові.

SAML - Для SAML подумайте про якийсь тип "угоди" між двома незв'язаними системами членства. У нашому випадку ми можемо використовувати US Airways та Hertz. Немає спільного набору даних, який може перенести вас з одного сайту на інший, але скажімо, Герц хоче запропонувати "угоду" US Airways. (Зрозуміло, я знаю, що це надзвичайний приклад, але майте мене) Після придбання рейсу вони запропонують безкоштовний прокат автомобілів членам його голови. US Airways та Hertz створили б певну форму довіри та певний спосіб визначити користувача. У нашому випадку нашим "об'єднаним ідентифікатором" буде адреса електронної пошти, і це був би один із способів довіри Hertz довіряти, що постачальник ідентифікаційних даних US Airways доставить токен і безпечний маркер. Після замовлення рейсу постачальник ідентифікаційних даних US Airways генерує маркер та позначає, як вони засвідчили автентифікацію користувача, а також "атрибути" про особу, у нашому випадку найважливішим атрибутом буде рівень його статусу в US Airways. Після того, як маркер заповнений, він передає його через якийсь тип посилання, або закодований в URL-адресі, і як тільки ми дістаємось до Hertz, він переглядає маркер, перевіряє його і тепер може надавати безкоштовний прокат автомобіля.

Проблема цього прикладу SAML полягає в тому, що це лише один спеціалізований випадок використання з багатьох. SAML - це стандарт, і існує майже занадто багато способів, які можна реалізувати.


Крім того, якщо ви не дбаєте про авторизацію, ви можете майже стверджувати, що стверджувати автентифікацію через SAML та OpenID .


4
Я досі не розумію різниці. "надати / заборонити доступ" та "надати доступ до api" звучать як те саме. Чи можете ви навести 2 приклади, схожіші, так що я бачу відмінності? Наприклад, чому ми не могли використовувати SAML для встановлення довіри між вашим додатком та Twitter? Або чому ви не могли скористатися OAuth для Герца, щоб розповісти USAirways про спеціальну угоду?
Тім Купер

3
Мені це подобається, але я завжди можу робити SSO з OAuth (вимагаючи доступу до API, що забезпечує ідентифікацію). Чи означає це, що OAuth може робити все, що може зробити SAML, і більше?
Дірк

@Dirk, ви майже маєте право, тобто ми можемо отримати особистість користувача за допомогою OAuth, як і багато програм, які просять увійти через Google, Facebook, GitHub, щоб отримати особисту інформацію та інші атрибути, щоб вони могли потрапити у свої програми. Але це правда, що ми можемо досягти більше, ніж отримати ідентичність за допомогою OAuth.
chirag soni

39

Подивіться на це просте пояснення, узагальнене тут:

Багатьох людей бентежить розбіжність між SAML, OpenID та OAuth, але насправді це дуже просто. Хоча є певне перекриття, тут є дуже простий спосіб розмежування трьох.

OpenID - єдиний вхід для споживачів

SAML - єдиний вхід для корпоративних користувачів

OAuth - авторизація API між додатками

Для людей, які зручні з моделями дизайну OO, я думаю, що тут є приємна відповідь для моделей обгортки . Придумайте моделі фасадів , декораторів та проксі . По суті це все одно, вони просто обгортки ... Різниця полягає у намірі кожного зразка .

Так само SAML, OAuth та OpenID сприяють різним намірам через загальний базовий механізм , який є перенаправленням до постачальника послуг / органу ідентичності для певної приватної взаємодії з подальшим перенаправленням на вихідний додаток третьої сторони.

Озирнувшись по мережі, ви побачите перекриття між можливостями протоколів. Аутентифікація через OAuth цілком розумна. SSO над OAuth може не мати великого сенсу, хоча як SAML і OpenID спеціально орієнтовані на федеративну ідентичність.

Що стосується самого питання, у корпоративному контексті SAML для SSO звучить більш доцільно, ніж OAuth . Я ставлюся під заклад, якщо ви подивитеся на додатки сторонніх розробників, які ви хочете інтегрувати з корпоративними ідентичностями, ви побачите, що вони вже розроблені для інтеграції з SAML / LDAP / Radius і т.д. між додатками або, можливо, додатками, що містять сервісно-орієнтовану архітектуру у великих корпоративних умовах.

Правила авторизації можуть бути визначені в корпоративному середовищі і іншими способами. LDAP є загальним інструментом для цього. Організація користувачів у групи та асоціація привілеїв програми проти членства в групі - це широко поширений підхід. Так буває, LDAP може використовуватися і для аутентифікації. Active Directory - прекрасний приклад, хоча я віддаю перевагу OpenLDAP.


1
Дякуємо за оновлення посилання @Sundeep
quickshiftin

Посилання оновлено, проте резюме, яке вже було у відповіді, те саме.
quickshiftin

OpenID побудований лише на oAuth. oAuth не підтримує власний інтерфейс користувача. OpenId робить це для нас. Іншої різниці між oAuth та OpenID немає
це пастка

@ Itatrap не відповідає дійсності; OpenID щодо аутентифікації, OAuth - це авторизація, однак вони поділяють подібний механізм (переадресація браузера). Ніякого стосунку з інтерфейсом користувача не має багато ... Дивіться також цю відповідь . Ви також можете подивитися тут . Ви також можете перечитати мою відповідь для більшого роз'яснення ха-ха.
quickshiftin

1
@ Itatrap Ви можете подивитися на OpenId Spec " автентифікацію, побудовану поверх OAuth 2.0"; а також специфікацію OAuth 2.0 "Рамка авторизації OAuth 2.0 " ... Знову ж таки, одна призначена для аутентифікації , інша для авторизації . Використання пізнішого для колишнього - це нормально, оскільки вони поділяють загальну основоположну парадигму (я вже 3-й чи четвертий раз сказала, що це лол). Все узагальнено у моїй незмінній відповіді. Ви повинні навчитися читати брато.
quickshiftin

3

Знайдено Гарна стаття тут

введіть тут опис зображення

SAML (Мова затвердження безпеки) - це набір стандартів для досягнення єдиного входу (SSO), Федерації та управління особами.

Приклад : Користувач (основний) засвідчує автентифікацію на веб-сайті бронювання авіарейсів, AirFlyer (постачальник ідентифікаційних даних), який має SSO, налаштований через SAML, із веб-сайтом бронювання шатлів, Shuttler (постачальник послуг). Після автентифікації на Flyer користувач може забронювати маршрутки на Shuttler, не вимагаючи аутентифікації

OAuth (Open Authorization) - стандарт для авторизації ресурсів. Це не стосується автентифікації.

Приклад : Мобільний додаток для обміну фотографіями (споживач OAuth), який дозволяє користувачам імпортувати фотографії зі свого акаунта в Instagram (постачальник OAuth), який надсилає тимчасовий маркер доступу або ключ до програми для обміну фотографіями, який закінчується через кілька годин.


2

SAML має різноманітні "профілі" на вибір, щоб інші користувачі могли "увійти" на ваш сайт. SAML-P або SAML Pasive дуже поширений і досить простий у налаштуванні. WS-Trust схожий і він також дозволяє федерацію серед веб-сайтів.

OAuth призначений для авторизації. Більше ви можете прочитати тут:

Яка різниця між OpenID та OAuth?


Я намагаюся зрозуміти різницю між "входом" та "авторизацією". Чи можете ви навести приклад, що ілюструє різницю?
Тім Купер

@TimCooper "login" - це вільна термінологія для автентифікації, тоді як " autize" - це авторизація ... Приклад на ваш запит
quickshiftin

1
@quickshiftin Добре, я розумію це відмінність. Здається, ваша відповідь означає, що SAML робить автентифікацію, тоді як OAuth робить авторизацію. Це правильно? Або обидва вони роблять і те, і інше - (у такому випадку я досі не знаю, у чому різниця).
Тім Купер

1
@TimCooper Протоколи мають деякі можливості перекриття. OAuth орієнтований на авторизацію, але він також підтримує аутентифікацію . SSO в корпоративному контексті - це те, для чого SAML створена. З іншого боку, SAML також підтримує авторизацію. Контекст є найбільш важливим фактором при визначенні того, які технології використовувати. Минулого року я написав розширення для Expression Engine, яке використовувало SimpleSAMLPhp для аутентифікації користувачів проти сервера Kerberos, а потім правила авторизації пошуку в системі LDAP. Це божевільний світ там!
quickshiftin

2

Вони обробляють тонкий випадок використання

  • SAML - обмін обліковими записами (наприклад, SSO) користувача на різних постачальників послуг (наприклад, веб-або веб-сервіс)
  • OAuth - Користувач, який делегує додаток для доступу до ресурсу від імені його / її

1

SAMLпризначений для аутентифікації - в основному використовується в сценарії Single Sign On . OAuthпризначений для авторизації представлення ресурсів.

JSON Web Token (JWT) - це альтернатива для SAML XML-токерів. JWT можна використовувати з OAuth

Хорошим посиланням є SAML проти OAuth: який я повинен використовувати?



Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.