Простой SSO - с использованием пользовательской аутентификации - CAS или какой-нибудь сервер Oauth или openid? - PullRequest
22 голосов
/ 14 мая 2011

Я хотел бы узнать больше о различных способах решения системы единого входа и их плюсах и минусах.Работали ли вы с одним конкретным решением, скажите мне, что в нем хорошего, и скажите, какие есть ограничения или неоптимальные части.

Ниже приведены подробности того, что я хотел бы знать, или не понимаю.

SSO - огромная тема, так как указан в википедии .Чем больше я изучаю, тем больше у меня возникает вопросов.

Прежде всего, я не понимаю необходимости проверки токенов CAS , для чего это нужно?

Это более безопасно? Я полагаю, что оно уязвимо для атаки "человек посередине", как и любая другая.Если клиенты также используют ssl?

Давайте сделаем это реальным, это наша потребность: Автоматическое распознавание / вход пользователя, если он уже вошел в одно из наших приложений.

  • my-php-app.com
  • my-java-app.com
  • my-ruby-app.com

(у нас много веб-приложений(написано на разных языках)

Мы хотим (сохранить) наши собственные правила аутентификации и хранилище пользователей, но могли бы добавить какого-нибудь поставщика Oauth2, например, через Facebook-connect.Мы хотим, чтобы он был простым для пользователей и простым для разработчиков, использующим его.

Что бы вы сделали?

  • CAS?
  • Openid?Могу ли я иметь централизованную аутентификацию с ним?
  • Другое?Или сервер с OAuth?

На стороне клиента вы бы использовали iframe, например лайтбокс, для отображения перенаправленной страницы?Почему / почему нет?


Еще один вопрос, связанный с SSO: Saml часто (ошибочно?) Смешивается в обсуждениях SSO - могу ли я понять, если скажу, что

реализация saml не будет предоставлять sso (autologin) при указании браузера на www.yetanother-myapp.com?


Некоторые связанные с этим вопросы SO, которые я изучал:

Спасибо за то, что обучили меня!

Ответы [ 3 ]

24 голосов
/ 21 мая 2011

Oauth предназначен для аутентификации приложений, позволяя им действовать от имени пользователя.Например, клиент Twitter может публиковать твиты с учетной записью пользователя.Его можно использовать для единого входа, как показывает Facebook, но это требует немного дополнительной работы.

Сравнение CAS и OpenID

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

OpenID имеет два (несовместимых) стандарта для предоставления дополнительных атрибутов для учетной записи, которые более или менее поддерживаютсяобщие библиотеки.В стандартной настройке CAS предоставляет только имя пользователя.Хотя CAS теоретически поддерживает обмен атрибутами, на данный момент поддерживает только 101 клиент .

И OpenID, и CAS могут выполнять автоматический вход в систему .Если пользователь уже вошел в систему, браузер будет немедленно перенаправлен обратно в ваше приложение.В простой настройке провайдер идентификации, однако, отобразит страницу входа, если пользователь не вошел в систему. Поэтому, если вы хотите разрешить анонимный доступ на вашей стороне, это потребует от людей щелчка по выделенной ссылке для входа.

К счастью, и OpenID, и CAS допускают прозрачную попытку входа .В этом режиме форма входа не отображается.Браузер сразу же перенаправляется обратно с аутентификационной информацией или без нее.Другими словами: вы можете перенаправить всех новых пользователей (без сеанса) на провайдера идентификации, как только они посетят ваш сайт.Есть хорошая диаграмма , объясняющая это в деталях.CAS называет это «режимом шлюза», и это достигается добавлением gateway = true к URL-адресу входа в систему.В OpenID это называется «немедленный режим», а параметром URL является openid.mode = checkid_immediate

CAS поддерживает единый выход .OpenID этого не делает.

Мой личный опыт показывает, что CAS очень прост в настройке и очень надежен с высококачественными библиотеками для всех распространенных языков программирования.OpenID имеет много мелких несовместимостей, так как это гораздо более сложная система.OpenID, однако, позволяет использовать учетные записи Google.

Ответы

Прежде всего, я не понимаю необходимости проверки токенов в CAS, для чего это нужно?

И OpenID, и CAS требуют, чтобы идентифицирующий поставщик проверил предоставленный токен.В противном случае злоумышленник может создать собственный токен или использовать токен, созданный пользователем до выхода из системы.

Должны ли клиенты также использовать ssl?

Да.

На стороне клиента вы бы использовали iframe, например лайтбокс, для отображения перенаправленной страницы?Почему / почему нет?

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

Iframe имеет проблему, от которой нужно избавитьсяэто когда логин был завершен.Для CAS существует учебник о том, как непосредственно встроить форму входа в CAS в HTML-код приложения.Другой вариант - показать всплывающее окно, как это делает Facebook Connect.

7 голосов
/ 16 мая 2011

Я могу ответить на некоторые вопросы относительно CAS, поскольку я использовал их раньше. У меня нет опыта работы с OAuth, и поэтому я не буду комментировать его.

Прежде всего, я не понимаю необходимости проверки токенов CAS, для чего это нужно?

CAS используется для целей единого входа. Используется, когда у вас есть несколько приложений (настольных приложений / веб-приложений на разных TLD), которые хотят выполнять аутентификацию из одного источника.

Это более безопасно? Я отмечаю, что он основан на перенаправлении и, следовательно, в равной степени подвержен атаке «человек посередине», так же, как и «настраиваемый» сервер аутентификации без дополнительного шага проверки токена. Я что-то упускаю из-за безопасности в CAS?

Серверы аутентификации используют SSL для предотвращения атак MitM. Но я не вижу, как эта проблема связана с SSO / CAS, поскольку у вас будет такая же проблема, даже если приложение выполняет собственную аутентификацию. Может быть, вы расскажете нам о том, какие атаки MitM вас волнуют с помощью настройки CAS

Является ли целью токенов обеспечение единого выхода и / или тайм-аута? (Мы не хотим, чтобы наши пользователи нас ненавидели.) Я изучал CAS, так как есть несколько замечательных реализаций Ruby, но я не уверен, что это то, что нам нужно.

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

Надеюсь, это понятно. Я пытался объяснить это на высоком уровне. Не стесняйтесь спрашивать о деталях, если есть какая-то часть, которая не ясна, или вы хотите больше подробностей о.

РЕДАКТИРОВАТЬ: я нашел более простое объяснение того, как работает CAS на http://www.jasig.org/cas/proxy-authentication (Остальная часть страницы рассказывает о прокси-аутентификации. Что является более сложным, но первые несколько абзацев - это простой случай, о котором мы говорим о здесь)

Я иду в свой экземпляр портала. Он перенаправляет меня в CAS для входа. CAS обнаруживает мой безопасный cookie-файл и выполняет однократную регистрацию, в результате чего мне не нужно повторно вводить имя пользователя и пароль. CAS перенаправляет меня обратно на портал. Портал подтверждает тикет, регистрирует меня на портале. Я вижу свой макет по умолчанию, заполненный несколькими классными каналами, сообщающими, что на улице очень холодно и что в новостях.

Обратите внимание, что портал не получил мой пароль.

0 голосов
/ 19 мая 2011

Это основано на моем опыте: Единый вход (SSO) связан с двумя сценариями: я) я вас очень хорошо знаю (участвуют две стороны) ii) Эй, друг, познакомься с моим другом (участвуют три стороны)

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

Теперь, с точки зрения реализации, SSO требует две области для оценки: -

a) как разные стороны / системы (внутренние или внешние по отношению к рассматриваемой организации) управляют учетными данными пользователей. Это называется управлением идентификацией.

б) как информация SSO должна передаваться между сторонами? Конечно, в большинстве сценариев.

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

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

@ Оле, сказав все выше об основах единого входа (с моей точки зрения), я думаю, вам следует больше сконцентрироваться на том, как пользователи и их роли идентифицируются в нескольких системах, т.е. в вашем случае: - магазин ваших пользователей, открытый поставщик outh2 ; так что больше думайте об управлении идентификацией.

Одним из решений может быть (в зависимости от вашего бюджета и времени), что ваше предприятие может потратить усилия на создание собственного централизованного интерфейса аутентификации в форме стандартных технологий интеграции, например. веб-сервис и за этим API, вы можете иметь любую реализацию: ваш собственный провайдер или сторонний oAuth или оба из них. Вы можете реализовать уровень движка между вашим API и уровнем провайдера, который принимает решения. Например, Движок может иметь домен приложения и соответствующее отображение провайдера аутентификации. Таким образом, вы получите единый интерфейс аутентификации для всех своих клиентов.

Клиент -> Внутренний централизованный API -> Engine -> Auth провайдера (ов) позвольте мне привести пример: i) вы можете получить доступ к веб-сервису, имя которого может быть singleSigonService. Полезная нагрузка XML может быть такой: -

<SingleSignOnReqType>   <sourceID>XYZ</sourceID>    <source-domain>my-java-app.com</source-domain>  <user-credentials>...</<user-credentials>
        <security-credentials>...</<security-credentials> </SingleSignOnReqType>

ii) Клиент веб-службы будет выполнять SSO-вызов на уровне централизованного движка (реализованный в любой технологии), который может выполнять валидацию и бухгалтерию и может основываться на исходном домене (например, my-java-app.com) во входящем XML делегировал бы запрос провайдеру Oauth2, такому как facebook-connect. Таким образом, ваш механизм, принимающий решения, будет управлять правилами аутентификации, как вы указали в своем требовании.

Таким образом, в основном все потребительские приложения будут иметь унифицированный интерфейс на основе веб-службы для вашего решения SSO. Это то, что я называю внутренним централизованным API.

...