SAML против федеративного входа с OAuth

100

В чем разница между SAML и федеративным входом через OAuth? Какое решение имеет больше смысла, если компания хочет использовать стороннее веб-приложение, но при этом хочет единого входа и быть органом аутентификации?

Чунг Ву
источник

Ответы:

128

Они решают разные задачи.

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

OAuth - это больше о делегировании доступа к чему-либо. По сути, вы позволяете кому-то «действовать» как вы. Чаще всего используется для предоставления доступа к API, который может что-то делать от вашего имени.

Это две совершенно разные вещи.


Некоторые примеры, которые могут помочь.

OAuth представляет собой твиттер. Допустим, вы используете Живую ленту Google и Twitter и хотите написать приложение, чтобы иметь возможность поддерживать их синхронизацию. По сути, вы можете установить доверительные отношения между вашим приложением и твиттером. В первый раз, когда вы пытаетесь связать приложение с твиттером, вы делаете классический запрос на вход в твиттер, а затем появляется окно подтверждения и спрашивает: «Хотите ли вы предоставить доступ к« имени вашего приложения »?» как только вы нажмете «да», доверие будет установлено, и теперь ваше приложение может действовать в Твиттере, как вы. Он может читать ваши сообщения, а также создавать новые.

SAML - для SAML подумайте о каком-то «соглашении» между двумя несвязанными системами членства. В нашем случае мы можем использовать US Airways и Hertz. Не существует общего набора учетных данных, который мог бы перенаправить вас с одного сайта на другой, но допустим, Hertz хочет предложить «сделку» с US Airways. (Конечно, я знаю, что это крайний пример, но терпите меня). После покупки рейса они предложат членам-председателям бесплатную аренду автомобиля. US Airways и Hertz установят некоторую форму доверия и способ идентификации пользователя. В нашем случае нашим «федеративным идентификатором» будет адрес электронной почты, и это будет односторонний набор доверия, которому Hertz доверяет, что поставщик удостоверений US Airways доставит точный и безопасный токен. После бронирования рейса провайдер идентификации US Airways сгенерирует токен и укажет, как они аутентифицировали пользователя, а также «атрибуты» человека, в нашем случае наиболее важным атрибутом будет его уровень статуса в US Airways. После того, как токен был заполнен, он передает его через какой-либо тип ссылки или закодирован в URL-адресе, и как только мы добираемся до Hertz, он просматривает токен, проверяет его и теперь может предоставить бесплатную аренду автомобиля.

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


В качестве альтернативы, если вас не волнует авторизация, вы можете почти возразить, утверждая аутентификацию через SAML и OpenID .

Nix
источник
4
Я все еще не понимаю разницы. «предоставить / запретить доступ» и «предоставить доступ к API» для меня звучат как одно и то же. Можете ли вы привести 2 более похожих примера, чтобы я мог видеть различия? Например, почему мы не могли использовать SAML для установления доверия между вашим приложением и Twitter? Или почему вы не могли использовать OAuth для Hertz, чтобы сообщить USAirways о специальной сделке?
Тим Купер
3
Я вроде как понимаю, но я всегда могу выполнить единый вход с помощью OAuth (запросив доступ к API, обеспечивающему идентификацию). Означает ли это, что OAuth может делать все, что может SAML, и даже больше?
Дирк
@Dirk, вы почти правы, т.е. мы можем получить идентификацию пользователя с помощью OAuth, а также, как и многие приложения, запрашивают логин через Google, Facebook, GitHub, чтобы получить идентификацию пользователя и другие атрибуты, позволяющие им войти в свои приложения. Но это правда, что с помощью OAuth мы можем добиться большего, чем просто получить идентификацию.
Чираг Сони
40

Взгляните на это простое объяснение, приведенное здесь:

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

OpenID - единый вход для потребителей

SAML - единый вход для корпоративных пользователей

OAuth - авторизация API между приложениями

Для тех, кто знаком с шаблонами объектно-ориентированного проектирования, я думаю, что есть хорошее следствие шаблонов-оберток . Подумайте о паттернах фасадов , декораторов и прокси . По сути это все равно, они просто фантики ... Разница заключается в намерении каждого шаблона .

Аналогичным образом, SAML, OAuth и OpenID способствуют различным намерениям с помощью общего базового механизма , который представляет собой перенаправление поставщику услуг / органу идентификации для некоторого частного взаимодействия с последующим перенаправлением в исходное стороннее приложение.

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

Что касается самого вопроса, в корпоративном контексте SAML звучит более уместно, чем OAuth для единого входа . Готов поспорить, если вы посмотрите на сторонние приложения, которые хотите интегрировать со своей корпоративной идентификацией, вы обнаружите, что они уже разработаны для интеграции с SAML / LDAP / Radius и т. Д. IMO OAuth больше подходит для взаимодействия с Интернетом. между приложениями или, возможно, приложениями, составляющими сервис-ориентированную архитектуру в большой корпоративной среде.

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

quickshiftin
источник
1
Спасибо за обновление ссылки @Sundeep
quickshiftin
Ссылка обновлена, однако резюме, которое уже было в ответе, осталось прежним.
quickshiftin
OpenID построен только на oAuth. oAuth сам по себе не поддерживает пользовательский интерфейс. OpenId делает это за нас. Другой разницы между oAuth и OpenID нет
это ловушка
@ Это не правда; OpenID касается аутентификации, OAuth - авторизации, однако они используют аналогичный механизм (перенаправление браузера). Ни то, ни другое не имеют ничего общего с пользовательским интерфейсом ... См. Также этот ответ . Вы также можете посмотреть здесь . Вы также можете перечитать мой ответ для получения дополнительных разъяснений, ха-ха.
quickshiftin
1
@ Itatrap Возможно, вам стоит взглянуть на спецификацию OpenId « аутентификация, построенная на основе OAuth 2.0»; а также спецификацию OAuth 2.0 «Структура авторизации OAuth 2.0 » ... Опять же, одна предназначена для аутентификации , а другая - для авторизации . Использование более позднего для первых - это нормально, поскольку они разделяют общую базовую парадигму (в третий или четвертый раз я сказал это, смех). Все резюмировано в моем неизменном ответе. Ты должен научиться читать братан.
quickshiftin
3

Они обрабатывают тонкий вариант использования

  • SAML - Совместное использование учетных данных (например, SSO) пользователя для различных поставщиков услуг (например, веб-службы или веб-службы)
  • OAuth - Пользователь, делегирующий приложению доступ к ресурсу от своего имени.
юдис
источник
резюмируется коротко и просто.
Декстер
3

Нашел здесь хорошую статью

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

SAML (язык разметки утверждения безопасности) - это набор стандартов для достижения единого входа (SSO), федерации и управления идентификацией.

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

OAuth (Open Authorization) - стандарт авторизации ресурсов. Он не занимается аутентификацией.

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

pk_code
источник
2

SAML имеет множество «профилей» на выбор, позволяющих другим пользователям «входить» на ваш сайт. SAML-P или SAML Passive очень распространены и довольно просты в настройке. WS-Trust аналогичен, и он также позволяет объединение веб-сайтов.

OAuth предназначен для авторизации. Вы можете прочитать больше здесь:

В чем разница между OpenID и OAuth?

goodguys_activate
источник
Я с трудом понимаю разницу между «логином» и «авторизацией». Вы можете привести пример, иллюстрирующий разницу?
Тим Купер
@TimCooper «логин» - это вольная терминология для аутентификации, тогда как «авторизовать» - это вполне авторизация ... Пример для вашего запроса
quickshiftin
1
@quickshiftin Хорошо, я понимаю это различие. Ваш ответ, похоже, подразумевает, что SAML выполняет аутентификацию, тогда как OAuth выполняет авторизацию. Это правильно? Или они оба делают и то, и другое (в этом случае я все еще не знаю, в чем разница).
Тим Купер
1
@TimCooper У протоколов есть некоторые перекрывающиеся возможности. OAuth предназначен для авторизации, но также поддерживает аутентификацию . SSO в корпоративном контексте - это то, для чего специально разработан SAML. С другой стороны, SAML также поддерживает авторизацию. Контекст является наиболее важным фактором при определении того, какие технологии использовать. В прошлом году я написал расширение для Expression Engine, которое использовало SimpleSAMLPhp для аутентификации пользователей на сервере Kerberos, а затем для поиска правил авторизации из системы LDAP. Это сумасшедший мир!
quickshiftin
1

SAMLпредназначен для аутентификации - в основном используется в сценарии единого входа . OAuthпредназначен для авторизации представлений ресурсов.

Веб-токен JSON (JWT) является альтернативой для токенов SAML XML. JWT можно использовать с OAuth

Хороший пример - SAML или OAuth: что мне использовать?

LCJ
источник