Подтвердить что ты не робот

Простой SSO - использование пользовательской аутентификации - CAS или некоторый Oauth или openid-сервер?

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

Далее детали того, что я хотел бы знать или не понимать.

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

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

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

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

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

(у нас много webapps, написанных на разных языках)

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

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

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

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


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

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


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

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

4b9b3361

Ответ 1

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

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

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

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

Оба 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.

Ответ 2

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

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

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

Безопаснее ли это? Я отмечаю, что он перенаправляется на основе и, следовательно, в равной степени подвержен атаке "человек-в-середине", так же, как "пользовательский" сервер auth без дополнительного этапа проверки маркера. Это что-то для безопасности в CAS, которую я пропускаю?

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

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

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

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

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

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

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

Ответ 3

Это основано на моем опыте: SSO (Single sign on) относится к двум сценариям: - i) Я знаю вас очень хорошо (участвуют две стороны) ii) Привет, друг, встретимся с моим другом (три стороны)

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

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

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

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

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

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

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

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

Клиент → Внутренний централизованный API → Двигатель → Поставщик (ов) позвольте мне привести пример: - 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.