вторник, 22 июля 2014 г.

Авторизация PHP OpenID

Наш блог не о программировании PHP, но это будет весьма полезно для веб-мастеров. Поясню почему. Есть такой  открытый стандарт децентрализованной системы аутентификации, который называется OpenID
Логотип
 Говоря человеческими словами - это такая штука, что если ты зарегистрирован в OpenID, то ты зарегистрирован на множестве сайтов, на которых есть поддержка этого стандарта. Вот сейчас я и объясню как сделать авторизацию в PHP скрипте, используя этот стандарт.
Но читатель может задаться вопросом, мол зачем мне пользоваться стандартом о котором никто не слышал и никто не пользуется? А вот и не правда! Наверняка каждый знает хоть одно из следующих названий  Google, Yahoo!, AOL, LiveJournal, MySpace, IBM, Steam, Orange и VeriSign. Сайт пользующиеся этой системой помечают себя соответствующим значком.
Для того, чтобы начать пользоваться технологией, нужно сначала понять принцип ее работы.
По сути OpenID - это открытый идентификатор, заменяющий стандартные логин и пароль. Систему можно разделить на две части. Сайты позволяющие зарегистрировать идентификатор и сайты его принимающие. Последних, разумеется, больше.
Как происходит работа этого протокола?
  1. Заходим на сайт и выбираем авторизацию через OpenID  
  2. Сервис получает адресс, пересылает на специальный сервер и проверяет является ли пользователь тем, за кого себя выдает
  3. Если пользователя нет в OpenID, то ему предлагают зарегистрироваться. Если же есть и все в порядке, то пользователь авторизуется на сайте
Многие знают сайт Кинопоиск, так вот, при входе там можно увидеть подобную картину

По сути все эти сервисы используют упрощенную технологию OpenID, но вот есть и вход по стандартному OpenID. Но в чем плюс такого метода? Почему бы не сделать к примеру обычную регистрацию логин и пароль? Ну многим просто лень пройти эти простые формальности. Зато если кому и не лень, так это спам ботам. А вот эти сервисы защищают от подобной проблемы. Давайте же наконец рассмотрим различные способы авторизации! Вот способ авторизации на PHP от Яндекса
 
<?php
require 'openid.php';

# Обработка входа

try {
$openid = new LightOpenID('http://example.com'); # URL вашего сайта
if(!$openid->mode) {
if(isset($_POST['login_x'])) {
$openid->identity = 'http://www.yandex.ru/';

# Запрос дополнительной информации о пользователе.
# Список доступных данных см. в разделе Дополнительные данные о пользователе
# Поля, указанные в параметре required, на сайте Яндекса отображаются как обязательные
# (незаданные значения подсвечиваются красным цветом)

$openid->required = array('contact/email');
$openid->optional = array('namePerson/friendly');
header('Location: ' . $openid->authUrl());
}

# Обработка подтверждения

# Если аутентификация не удалась или отменена

} elseif($openid->mode == 'cancel') {
echo 'Ошибка входа на сайт';
} else {

# Получение данных пользователя при успешной аутентификации

if ($openid->validate()) {

$attrs = $openid->getAttributes();
$user_data = array(
'id' => $openid->identity,
'nickname' => $attrs['namePerson/friendly'],
'email' => $attrs['contact/email']
);
if (!$user_data['email']) {
echo 'Email не задан';
} else {
echo 'ID ' . $user_data['id'] . ' has logged in';
# Далее — выборка существующего или регистрация нового пользователя
}

} else {

echo 'Ошибка входа на сайт';

}
}
} catch(ErrorException $e) {
echo $e->getMessage();
}
?> 

А кнопочку входа через Яндекс можно сделать и того проще:
<form action="{URL точки входа}" method="post">
  <input type="image" name="login" src="{URL картинки}">
</form>
Точка входа, это судя по всему название вашего скрипта OpenID. А картинку можно такую поставить например такую
Но внимательный читатель, понимающий в PHP может задаться, а где же мне взять файл
openid.php? Ведь скрипт использует функции из этой библиотеки. А библиотеки то и нет? А об этом дальше. Было бы преступлением оставить в стороне авторизацию google, ведь это чуть ли не самый популярный сайт, поисковик и что угодно в общем. Ну пример авторизации гугла и заодно библиотека, которая требуется для яндекс авторизации находится тут. Так вот, там все есть и работа с базой и пример и библиотека, ну просто находка для человека, который хочет сделать авторизацию на php. Ну, а для гугла вот такую кнопку попробуйте

Таким способом можно сделать odnoklassniki авторизацию, так же делается и авторизация вконтакте, да и в общем то любая авторизация на сайте.
Понятное дело, что новичок плохо разбирающийся в php мало что извлечет из вышеописанного, но возможно этот новичок захочет добавить все это в закладки и вернуться немного позже?
А какие выводы и пользу мог бы извлечь для себя человек знающий PHP? Можно сделать быструю и удобную регистрацию. Людям проще один раз нажать на кнопку, чем проходить стандартную регистрацию с логином, паролем, капчей и прочими данными, которые им по просту лень вводить.
Попробуйте организовать на своем сайте OpenID и вы просто удивитесь как возрастет его посещаемость!

Комментариев нет :

Отправить комментарий