Как стать автором
Обновить

Комментарии 21

Проще реализовать все через свой OAuth2 IdP типа fb connect.
Перед тем, как я все это начинал делать, я сделал большой ресеч на тему SSO, и компаний, которые его используют. Так вот, Хабр, Яндекс, Google которые я смотрел, почему-то тоже не используют OAuth2 как IdP.

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

Далее, если мы будем даже использовать OAuth2 как IdP, то потребность в реализации такого функционала как замоминание SP, с которого пришел пользователь все равно ложится на наши плечи. Да, в OAuth2 есть client_id, но если вы смотрели исодники IdP бандла, то там можно заметить (да и из статьи тоже), что в приложении мы будем оперировать SP не как строкой, которая его идентифицирует, а как инстансом класса этого SP, в который мы можем поместить нашу дополнительную логику, для удобной работы с этим SP из IdP.

Также нам все-равно придется делать всю логику для механизма logout'а. Чтобы юзер был разлогинен на всех сервисах, после того, как нажмет «Выход». Примерно так, как это происходит, когда жмем «Logout» в Google Accounts.

Вернемся к моменту, когда мы выбрали OAuth2 для IdP, и теперь прикинем каким количеством «кастома» нам придется его обернуть/написать, что начинаешь думать, а так ли нужен этот OAuth2? И проще-ли получается?

Все же, мне кажется надо различать когда компании требуется свой SSO, для своих проектов, или когда компании требуется стать провайдером аутентификации, тут безусловно предпочтительнее использовать OAuth2, т.к. 99% придется разным приложениям выдавать разный уровень доступа на чтение к ресурсам пользователя.
Вообще гугл использует OpenID Connect, который базируется на OAuth2 — Google Identity Platform/OpenID Connect.
Страницы логина, логаута и self-service у каждого реализуются по-своему, так как протокол не специфицирует сам вид страницы. Максимум — хинты для отображения.

ClientId запоминается при выдаче токена и хранится в сторадже выданных токенов.

Логика логаута есть в спеке OpenID Connect Session Management: OpenID Connect Session Management 1.0 — draft 23

Я понимаю, что у вас PHP, но посмотрите на практически готовое решение: https://github.com/IdentityServer/IdentityServer3.
Какой-то из билдов собирали уже на vNext. Так что и хостинг на *Nix где-то рядом.
Там решены все ваши вопросы. На крайняк — просто портируйте) лицензия позволяет. Будут вопросы по коду — обращайтесь)
Судя по вашему комментарию, вы тоже собаку съели на этом. При всем желании, не изобретать велосипед, намерение внеднить что-то масштаба enterprise и на Java/.NET ведет к неумолимому росту сложности проекта в геометрической прогрессии.

Просто представьте себе среднего PHP разработчика, который это увидит? :) В лучшем случае будет разбираться неопределенное кол-во времени, в худшем вообще уйдет из компании )

За ссылку на OpenID Connect Session Management 1.0 — draft 23 спасибо. Думаю добавлю это в бандл, полезный функционал.

Так или иначе, из-за того что все на PHP — приходится искать рациональный баланс.
У нас просто свой сервак который поддерживает еще пачку протоколов кроме OIDC и эта реализация — донор имплементации протокола)

Это еще не enterprise) Как раз просто полная реализация спеки и дополнений. Недавно они прошли верификацию.
Можно попробовать портировать на PHP. Код там достаточно простой. Зато будет по стандарту и все клиенты смогут нормально подключаться. Плюс можно будет полагаться на инфу о best practices при организации доступа и разделении прав.

Если проект сам в себе — то и смысла прикручивать это нет. Если хочется SSO — То почти всегда это внешнее приложение. А там пофиг на чем оно написано. Но SSO практически всегда усложняет процесс) Особенно при включении валидации сертификатов ;D

Для своих разработчиков мы просто настраиваем все сами. Им говорим только то, что в конфиг вписать. Остальное за них делает middleware.
В таком случае можно попробовать оживить проект bitbucket.org/PEOFIAMP/phpoidc, который вроде как является полноценной реализацией OIDC. Хотя-бы не в .NET придется ковыряться :)
Это отличный вариант. А в PHP есть что-то типа middleware из ноды или asp.net?

А проект то вроде живой. Последний коммит — 2015-04-09.
И если не врут, то уже сделаны.:
OpenID Connect Core 1.0
OpenID Connect Discovery 1.0
OpenID Connect Registration 1.0
OpenID Connect Dynamic Registration 1.0
OpenID Connect Session Management 1.0
В PHP как таковом — нет, но в архитектуре Symfony2 есть события, например kernel.request. Обычно туда все такие штуки вешают, чтобы для приложеньки это все было «прозрачно».

Тут вижу такой вариант. Из той либы выделить OP, RP. А дальше обновить свои бандлы, например в версии 0.3.x чтобы они были просто враппером для тех библиотек и как раз добавляли этот middleware слой.
Вполне вариант. Мы вот вынуждены вырезать часть с OIDC, так как страницу логина жестко зашили, а мы используем динамическую генерацию страницы и мультфакторный вход. Так что норм)
Несмотря на то, что проект живой (технически) я не представляю, кто в своем уме потянет к себе в проект тот код, который там есть. «Привет из 00-х» грубо говоря. :)
Ну можно просто портировать куски логики с поправкой на современные реалии. Потом уже почистить саму логику. Главное что есть от чего отталкиваться и не надо с 0 писать тонны кода по проверке всех условий протокола )
Ну естественно :)
Есть PSR-7 и совместимые с ним мидлвэры. Симфони предоставляет бридж для PSR-7 так что можно спокойно делать мидлвэры.
А SSO через LDAP по такой же схеме реализуется? Скоро надо будет реализовывать для web-приложения внутри корпоративной сети, хочу предварительно знания матчасти подкачать.
Ldap это просто база данных, так что нужно будет просто написать userProvider который будет смотреть туда
Слово «атака» присутствует в русском языке и пишется с одной «Т».
Почему не использовать готовые решения, к примеру forgerock.org: OpenAM, OpenIDM и др.?
Они хотят денюжек если в проде заиспользуете вроде как.
НЛО прилетело и опубликовало эту надпись здесь
Будет очень круто, если вы внедрите его у себя в каком-либо проекте. Чем в большем количестве проектов будет использоваться, тем функциональней он будет :)
Зарегистрируйтесь на Хабре , чтобы оставить комментарий

Публикации

Истории