Ограничен достъп и логване с OpenID
Някой от страниците на сайта ganbox.com реших да са достъпни само след логване, затова ми се наложи да си направя логин форма, през която потребителите да се логват и да получават достъп. Обикновено една такава система включва в себе си няколко функции: страница за регистриране, страница за логване, страница за забравена парола, страница за промяна на парола или други лични данни, управление на сесии, база данни с данни за потребителите. Мислих няколко варианта и накрая реших, че без последните две няма как да мина, но нямам време да правя другите страници. Затова избрах решение с OpenID логване.
Какво е OpenID?
Съвсем накратко: с една парола достъп до много сайтове. Това е метод, който обединява протокол и системи, който ти дава възможност да се регистрираш в един сайт и след това да получаваш достъп до много други сайтове, които поддържат OpenID, само като се логваш в първия сайт.
Как работи OpenID
Регистрираш се в един сайт, който е доставчик на OpenID и там получаваш данни за достъп до акаунта, които обикновено са комбинация от имейл и парола или потребителско име и парола. От този момент можеш да се логваш във всеки един сайт, който поддържа този доставчик на OpenID.
Някои от сайтовете, като например сайта за споделяне на връзки dao.bg (а и много други подобни сайтове), изискват първо да си създадеш профил в сайта и едва след това може да присъединиш OpenID идентификатор в профила си, за да може да се логваш с OpenID.
Трик за сигурност: След като въведеш OpenID е препоръчително да смениш паролата си в този сайт с някаква невъзможно сложна и дълга парола.Тъй като няма повече да ползваш тази парола, от съображения за сигурност е по-добре да не може да бъде налучкана от хакери.
Предимства на OpenID
1. Без измисляне на нови пароли.
Не е нужно да помниш много пароли, а само една и по-рядко ще ти се случва да забравиш паролата си.
2. Бърза регистрация.
В повечето сайтове, в които искаш да влезеш няма да ти се налага да се регистрираш или ако има такава стъпка доста от данните ще бъдат попълнени, защото се изпращат от сайта доставчик на OpenID.
3. На уеб програмистите спестява време.
Отпада нуждата от програмиране на няколко уеб страници.
4. По-висока степен на сигурност.
Виж по-долу в параграфа Сигурност.
Недостатъци на OpenID
Хора които са слабо запознати с интернет технологиите и с OpenID могат да се уплашат, че за вход в твоя сайт трябва да въведат паролата си за Гугъл. Това се случи в ganbox.com, затова в логин страницата поставих блок Информация.
Сигурност
Всъщност метода на логване през OpenID е с висока степен на сигурност, защото въвеждаш паролата си в страница на Гугъл защитена с SSL и това, което Google изпраща към сайта, в който се логваш се контролира от теб. В случая на ganbox.com това е единствено имейл адреса, като при първото изпращане ти получаваш предупреждение за това и се съгласяваш с това действие.
Трябва да гледаш с добро око на сайтовете, които предлагат OpenID логин. Повечето хора използват една и съща парола за няколко сайта. Ако и ти правиш така, то при използване на OpenID избягваш следния риск (макар и минимален). При регистриране в нов сайт в момента на въвеждане на паролата е възможно някой от администраторите да получи тази парола в чист текст. След това той може да злоупотреби и ще има достъп до всичките сайтове, в които използваш тази парола. При OpenID нямаш този проблем, защото в новия сайт не се изпраща парола.
Логване с OpenID в страница на PHP
В ganbox.com за начало като OpenID доставчик избрах Google, защото почти всеки има поща в gmail.com или ползва друга услуга на Google и има Google акаунт. В последствие може да се добавят още доставчици, като например Facebook и човек ще може да си избира с кой от двата да се логне.
В този урок ще покажа как да си направиш логване в твоя сайт през акаунт на Гугъл.
1. Изтегли си библиотеката class.openid.php, разархивирай файла и го постави в директория inc, която трябва да е в главната уеб директория.
2. В главната уеб директория създай два файла login.php и return.php
Основния код в login.php, който стартира процес по логване е:
require_once("/inc/class.openid.php"); if(!user_logged()){ GoogleOpenId::login("https://ganbox.com","https://ganbox.com/return.php", NULL, true); }else{ header('Location: /');exit; }
Функция user_logged() проверява дали потребителя се е логнал.
Последния параметър true на GoogleOpenId::login указва дали твоя сайт ще изиска имейл адрес.
Този ред ще пренасочи браузъра към страница за логване в Google профил (ако вече не си логнат в Гугъл), след като се логнеш първият път ще ти се изведе съобщение, че сайта изисква имейл и трябва да се съгласиш да предоставиш тази информация, след което ще те редиректнат отново към https://ganbox.com/return.php
В return.php основния код е:
require_once("/inc/class.openid.php"); $response = GoogleOpenId::getResponse(); if( 'id_res' == $response->getMode() ){ # успешно логване $email = $response->getEmail(); # имейл user_login($email); header('Location:/');exit; }else{ die('Неуспешен вход'); }
В този код функцията user_login() се грижи да създаде сесия и да отбележи, че потребителя е логнат. Ако до момента не е имало потребител с подадения имейл, автоматично го регистрира и логва.
Това е всичко по оторизирането на потребителя - просто и бързо.
След това във всяка страница, в което искам да огранича достъпа викам функция user_logged(), която проверява дали потребителя е логнат и ако не е логнат или ако сесията е изтекла се пренасочва към страница за логване.
if(!user_logged()){ header('Location: /login.php');exit; }
Работещ пример има в сайта ganbox.com, като с ограничен достъп са страниците Класиране на сайт, SEO състояние на сайт и Промяна на снимка.
Това е накратко. Ако има интерес и имам време мога да дам пълните кодове. Пишете коментари! 🙂
Много интересно ще го пробвам.
Реших да пробвам логването за моя сайт , но съм неопитен моля за малко помощ - създадох двата файла,но не разбирам третия - ''викам функция user_logged(), която проверява дали потребителя е логнат''.Как и къде да поставя кода за сайт който не е CMS ,а html /dreamweaver/.
Видях , че статията е разглеждана над 4000 пъти.Ако има подробно ръководство може да помогне на повече хора.
Благодаря предварително.