пятница, 30 марта 2012 г.

Ungena — новый виджет для авторизации

Хочу представить Вашему вниманию новый виджет для социальной (и не только) авторизации. Это ungena.

Эта идея не нова. Хорошо известны такие виджеты, как loginza и ulogin для рунета и gigya и janrain для буржнета. Поэтому я сразу начну с отличий.

В ungega помимо авторизации с помощью социальных провайдеров есть возможность авторизоваться классическим способом (с помощью email'а и пароля). Непосредственно в виджете можно зарегистрировать свой «классический» аккаунт или восстановить пароль, если забыли.

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

Классическую авторизацию, конечно не сложно организовать самому. В сети есть куча примеров, для CMS есть плагины. Однако, не редко встречаются сайты, где авторизация реализована только с помощью социальных виджетов.

Так вот я и решил, что модуль классической авторизации в виджете — вещь нужная. Сервис ungena только что запущен, и я не могу ничего сказать о статистике. Но я полагаю, что классической авторизации будет значительно больше, чем социальной.

Другое важное отличие — это настройка оформления виджета. Администратор виджета может использовать свой CSS файл. Таким образом можно полностью подстроить виджет под дизайн сайта (менять картинки кнопок, цвета, размеры… все что можно сделать при помощи CSS). 

Ungena не лишен недостатков. Это в первую очередь отсутствие плагинов для интеграции в CMS. И еще нельзя менять порядок кнопок провайдеров. Доработаем, но не сейчас.

И немного о технологии. В основу я положил следующие принципы: авторизация должна быть максимально простой, безопасной и единообразной (на сколько это возможно).

image

Структурно авторизация в ungena разбита на аутентификацию и необязательные API вызовы.

1. Посетитель кликает на иконку провайдера, редиректится на его сайт и вводит там свои логин и пароль.
2. Провайдер редиректит посетителя обратно на ungena
3. Ungena редиректит посетителя на callback страницу, которую укажет администратор виджета. При этом передадутся сгенерированный токен, ID посетителя, время генерации токена и подпись (md5 хэш от конкатенации этих параметров и секретного номера, который известен только администратору виджета).
На это аутентификация завершена. Осталось только проверить полученные данные. Это можно сделать, например, следующим скриптом на PHP:


class Member {

    public $uid;

    public function checkAuth(){

        $secret = 52476358; // Ваш секретный номер
        $token = $_GET['token'];
        $receivedSig = $_GET['sig'];

        // Проверяем время генерации токена
        $receivedTime = $_GET['timestamp'];
        $currentTime = time();
        $difTime = $currentTime - $receivedTime;

        // Максимальный срок жизни токена
        // зададим в 60 секунд
        if ($difTime > 60)
            return false;

        // Вычисляем подпись
        $calculatedSig = md5($token.'&'.$secret.'&'.$this->uid.'&'.$receivedTime);

        // сравниваем ее с полученной
        if ($receivedSig == $calculatedSig) {
            return true;
        } else {
            return false;
        }

    }
}

$member = new Member();

$member->uid = $_GET['uid'];

// Проверка авторизации
if(!$member->checkAuth()) {

    // Посетитель не авторизован

} else {

    // Посетитель авторизован

}


4. API запрос на данный момент реализован только один: получение основной информации от посетителя (имя, пол, день рождения, фото, email). Отправляется запрос по адресу: ungena.com/userinfo/ВАШ_ТОКЕН 
Токен будет действителен только 60 секунд с момента его создания.
Данный запрос не требует получения каких либо разрешений от посетителя за исключением email'а и дня рождения в Facebook'е (их мы запрашиваем при аутентификации для создания единообразного API)
5. Ungena возвращает ответ в JSON формате.

Вот, пожалуй, и все что я хотел рассказать об ungena.

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

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