Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Единый сервер авторизации

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (2): [1] 2 »   

> Без описания
Vinyl
Отправлено: 25 Декабря, 2012 - 10:29:40
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 645
Дата рег-ции: Янв. 2012  
Откуда: Армавир, Краснодарский край


Помог: 15 раз(а)




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

Во-первых, какие есть недостатки у такого алгоритма?
Я вижу два: с выкл. куками работать не будет и нагрузка может быть существенной, потому что сайтов будет 10/20/30/.../неизвестно сколько.

Во-вторых, каким образом при проверке пользователя (рис. 2, п. 2) отправлять запрос к серверу БД? Сокеты?

Спасибо.
Прикреплено изображение (Нажмите для увеличения)
auth.jpg

(Отредактировано автором: 25 Декабря, 2012 - 10:30:49)



-----
Пессимисты пользуются die(), оптимисты - exit()
 
 Top
Vinyl
Отправлено: 25 Декабря, 2012 - 10:31:07
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 645
Дата рег-ции: Янв. 2012  
Откуда: Армавир, Краснодарский край


Помог: 15 раз(а)




.
Прикреплено изображение (Нажмите для увеличения)
check.jpg


-----
Пессимисты пользуются die(), оптимисты - exit()
 
 Top
EuGen Администратор
Отправлено: 25 Декабря, 2012 - 10:34:42
Post Id


Профессионал


Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007  
Откуда: Berlin


Помог: 707 раз(а)






-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
Vinyl
Отправлено: 25 Декабря, 2012 - 10:42:54
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 645
Дата рег-ции: Янв. 2012  
Откуда: Армавир, Краснодарский край


Помог: 15 раз(а)




EuGen, OpenID мне не нравится тем, что за вводом логина следует переадресация на другой ресурс (пусть даже и мой), где требуется подтверждение от пользователя. Это не приемлемо. А про SAML сейчас бегло почитал - если честно, вообще ничего не понял, как и что работает. Поищу ещё информацию. Спасибо.

(Отредактировано автором: 25 Декабря, 2012 - 10:44:40)



-----
Пессимисты пользуются die(), оптимисты - exit()
 
 Top
EuGen Администратор
Отправлено: 25 Декабря, 2012 - 10:56:28
Post Id


Профессионал


Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007  
Откуда: Berlin


Помог: 707 раз(а)




Полезным будет еще почитать про Web SSO (desc.)


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
Zuldek
Отправлено: 25 Декабря, 2012 - 11:47:00
Post Id


Постоянный участник


Покинул форум
Сообщений всего: 2122
Дата рег-ции: Июнь 2010  


Помог: 50 раз(а)




Не знаю о каком проекте идет речь, + отказ от сессий тоже не понятен при наличии кук.
Есть один базовый класс пасспорта со всеми методами проверки пользователя, проверки уровня прав, авторизации и т.д. Данные в бд, при авторизации пользователь остается в текущем проекте. Все проекты - дочерние сайты, разделы единого портала наследуют этот класс. К нему же прикручена авторизация с Openid.
Иное, если речь не идет о каком-нибудь интернет-банке считаю неоправданным. Разнести задачи авторизации по разным железкам не представляется сложной задачей( если дело в нагрузке).

(Отредактировано автором: 25 Декабря, 2012 - 11:47:35)

 
 Top
Vinyl
Отправлено: 25 Декабря, 2012 - 11:52:39
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 645
Дата рег-ции: Янв. 2012  
Откуда: Армавир, Краснодарский край


Помог: 15 раз(а)




EuGen, видимо, не дорос ещё мой гений до таких вещей А чё я? Я ничё! Я них%)на понять не могу, как и что работает. Почитаю конечно, но не уверен, что вникну. Но все равно спасибо


-----
Пессимисты пользуются die(), оптимисты - exit()
 
 Top
Vinyl
Отправлено: 25 Декабря, 2012 - 17:56:23
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 645
Дата рег-ции: Янв. 2012  
Откуда: Армавир, Краснодарский край


Помог: 15 раз(а)




А как насчет OAuth 2? Кто что хорошего/плохого скажет?

Zuldek пишет:
Иное, если речь не идет о каком-нибудь интернет-банке считаю неоправданным.
Почему так категорично? Вы считаете, никто не в силах сделать что-то лучше (безопаснее/удобнее/быстрее/...), чем тот же OpenID?


-----
Пессимисты пользуются die(), оптимисты - exit()
 
 Top
Vinyl
Отправлено: 26 Декабря, 2012 - 08:35:11
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 645
Дата рег-ции: Янв. 2012  
Откуда: Армавир, Краснодарский край


Помог: 15 раз(а)




Много читал - это все не то (если я правильно понял). Из статьи Котерова об OAuth:
Цитата:
OAuth — протокол для авторизованного доступа к стороннему API. OAuth позволяет скрипту Consumer-а получить ограниченный API-доступ к данным стороннего Service Provider-а, если User дает добро. Т.е. это средство для доступа к API
Мне не нужно, чтобы User давал добро.

Попробую объяснить. Предположим, есть у меня сервер https://server.com, который выступает в роли единого сервера авторизации для нескольких сервисов. Количество и адреса этих сервисов мне известны. Допустим, их три: http://site1.com, http://site2.com и http://site3.com. При заходе на https://server.com нас редиректит на (допустим) http://site1.com, т.к. https://server.com используется только для авторизации.

Авторизация:
Заходим на любой из трех сервисов, видим форму авторизации, вводим логин-пароль, отправляем форму на https://server.com, там проверяются данные из формы, если все верно - формируется токен, записывается токен, юзер-агент и IP в таблицу к юзеру, ставится кука вида
PHP:
скопировать код в буфер обмена
  1. setcookie ("token", $token,time()+3600, "/", "server.com", 1);
затем браузер получает заголовок "Location:x", где x - страница, с которой пришли.

Aутентификация:
Происходит при каждой загрузке страницы любого из сервисов http://site(n).com.
Если есть кука с токеном для домена https://server.com, отправляем её значение серверу (допустим, через сокет, в зашифрованном виде) вместе с IP и юзер-агентом. Сервер расшифровывает полученные данные, ищет таблицу с таким токеном, если нашел - проверяет IP+U-A, если все хорошо - возвращает то, что требуется (id, разрешения, имя, фамилия, и т.д.).

Преимущество такого подхода в том, что авторизовавшись на http://site1.com, пользователю не нужно будет подтверждать что-то на http://site2.com, он уже там авторизован. Ему не нужно нажимать кнопки "Войти через http://site1.com", он авторизован на всех сервисах, известных серверу https://server.com. И база данных с пользователями одна.

Чем такой подход хуже OpenID или OAuth (кроме безопасности)? Просьба отвечать конструктивно, а не "Да никто так не делает", "Зачем изобретать велосипед?"или "Это же контакт с яндексом юзают, лучше быть не может!". Спасибо!


-----
Пессимисты пользуются die(), оптимисты - exit()
 
 Top
KingStar
Отправлено: 26 Декабря, 2012 - 09:36:34
Post Id



Участник


Покинул форум
Сообщений всего: 1889
Дата рег-ции: Авг. 2011  
Откуда: Беларусь


Помог: 69 раз(а)




интересно как ты получить кукисы домена server.com на домене site(n).com ??? можно конечно на JS что-то намутить, но ИМХО о безопасности уже речи не идет


-----
То что программа работает, не означает что она написана правильно!
 
 Top
Vinyl
Отправлено: 26 Декабря, 2012 - 09:58:24
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 645
Дата рег-ции: Янв. 2012  
Откуда: Армавир, Краснодарский край


Помог: 15 раз(а)




KingStar пишет:
как ты получить кукисы
Верно, никак. Зашел в тупик. Нереализуемая задача? OpenID и OAuth все равно делают не то, что надо. Тогда как быть? Из готовых решений я до сих пор не нашел того, что дает возможность авторизоваться на одном сайте и быть залогиненным без подтверждения на остальных.



А если куки ставить сразу всем известным сайтам?
Допустим, есть таблица с сайтами. Делаем
PHP:
скопировать код в буфер обмена
  1. foreach($row['domain'] as $val)
  2. {
  3.   setcookie ("token", $token,time()+3600, "/", $val, 1);
  4. }
Образно, не примите за рабочий код.

(Отредактировано автором: 26 Декабря, 2012 - 11:50:57)



-----
Пессимисты пользуются die(), оптимисты - exit()
 
 Top
KingStar
Отправлено: 26 Декабря, 2012 - 10:20:41
Post Id



Участник


Покинул форум
Сообщений всего: 1889
Дата рег-ции: Авг. 2011  
Откуда: Беларусь


Помог: 69 раз(а)




мот на server.com использовать для данных сессии, а остальные к нему коннектятся по NFS и хранят сессии в подключенном каталоге Хм
(Добавление)
Радость только не подумай что Need For Speed Ха-ха Ха-ха Network File System


-----
То что программа работает, не означает что она написана правильно!
 
 Top
Vinyl
Отправлено: 26 Декабря, 2012 - 10:44:52
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 645
Дата рег-ции: Янв. 2012  
Откуда: Армавир, Краснодарский край


Помог: 15 раз(а)




KingStar пишет:
Need For Speed
было бы круто, наверное)) Я понял. Тогда по порядку.


  • На сайте http://site1.com я заполнил форму
  • Она отправилась на https://server.com
  • Там данные прошли проверку, прошла запись токена, ua и ip в бд, а так же появились $_SESSION['uid'], $_SESSION['token'], $_SESSION['ip'] и $_SESSION['ua'].
  • Записали в каталог '/home/users/'.$_SESSION['uid'].'/' в каком-то виде остальные нужные нам данные
  • А дальше?


Я набираю http://site3.com. Как меня идентифицируют?

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

(Отредактировано автором: 26 Декабря, 2012 - 10:45:13)



-----
Пессимисты пользуются die(), оптимисты - exit()
 
 Top
KingStar
Отправлено: 26 Декабря, 2012 - 10:56:25
Post Id



Участник


Покинул форум
Сообщений всего: 1889
Дата рег-ции: Авг. 2011  
Откуда: Беларусь


Помог: 69 раз(а)




Vinyl пишет:
Я набираю http://site3.com. Как меня идентифицируют?


это вопрос по nfs ??? или

Vinyl пишет:
По поводу нежелательности nfs:


тогда используй домены 3-го уровня ((n).server.com) на остальных серверах, на основном создавай кукисы, только так ты сможешь передать их


-----
То что программа работает, не означает что она написана правильно!
 
 Top
Vinyl
Отправлено: 26 Декабря, 2012 - 11:02:16
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 645
Дата рег-ции: Янв. 2012  
Откуда: Армавир, Краснодарский край


Помог: 15 раз(а)




KingStar пишет:
Vinyl пишет:
Я набираю http://site3.com. Как меня идентифицируют?
это вопрос по nfs ???
По алгоритму в принципе. У нас при каждом запросе к сайту происходит соединение с NFS-каталогом, верно? Вопрос - с каким? Общим для всех? Как скрипт узнает, где каталог текущего пользователя? Я понять не могу практического применения NFS в данном случае.



KingStar пишет:
домены 3-го уровня
Ну это уже совсем не универсально) И не интересно. Неужели и вправду нет адекватного решения вышеизложенной задачи?

(Отредактировано автором: 26 Декабря, 2012 - 11:06:20)



-----
Пессимисты пользуются die(), оптимисты - exit()
 
 Top
Страниц (2): [1] 2 »
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« HTTP и PHP »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB