Что такое id и auth Вконтакте

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

На своих проектах я использую клёвую библиотеку django-social-auth, до неё пробовал django-ulogin, но сам сервис uLogin мне не понравился (мои сумбурные заметки об этом). На пыхе также обсуждали другие библиотеки, в частности loginza, но отзывы о ней плохие, поэтому даже не пробовал. В любом случае сервисы — это сервисы, и зависимость от сервисов это больше проблема (частые падения сервисов, убогие виджеты и внешний вид без кастомизаций и т.п.) чем зависимость от библиотеки, которая проксирует запросы к конечным «социальным сетям».

Далее будем обсуждать только django-social-auth.

Вообще, нам интересно два репозитория:

  • Основной, от omab;
  • И второй, со свежой поддержкой русских социалок от krvss, в который я пулял фиксы.

Регистрации в сетях

Для начала нам надо получить ключи от необходимых социальных сетей, на странице проекта в GitHub есть инструкции для множества социальных сетей, но в свое время у меня были трудности и я решил записать последовательность действий для некоторых из них.

Как узнать свой id и auth key для клиента в Копателе.

Facebook

Зайдите на https://developers.facebook.com/apps/ и нажмите на + Create New App. Введите название приложения (название сайта или проекта), после сабмита формы вы увидите реквизиты «App ID» и «App Secret».

Добавьте их в свой settings.py, пример:

FACEBOOK_APP_ID = ‘696381432507483’ FACEBOOK_API_SECRET = ’15afb0bbeb173aae12e8e875ffccc7a4′

Теперь заполните поле «App Domains», укажите через пробел домены (например один локальный, другой продакшен домен). Поставьте галочку на «Website with Facebook Login» и введите адрес для редиректа, я редиректю в корень продакшен сайта.

Twitter

Зайдите на https://dev.twitter.com/ и введите логин и пароль от вашей учетной записи в Twitter. Далее заходите на https://dev.twitter.com/apps и жмёте на Create a new application, заполните нужные поля и соглашаетесь с правилами, после чего вы получите «Consumer key» и «Consumer secret».

Добавьте их в settings.py, пример:

TWITTER_CONSUMER_KEY = ‘G2wMq4KYpTmgZDcjg0EzQ’ TWITTER_CONSUMER_SECRET = ‘rGHMGIbOwIEpoxjXzOahc2KmvxY8h10DpZ90LwqEjec’

По умолчанию вам выдадут Access level «Read-only», для авторизации этого вам хватит. Рекомендую прочитать The Application Permission Model.

Вконтакте

Зайдите на страницу https://vk.com/developers.php и нажмите Создать приложение, выберите Тип «Веб-сайт» и введите адрес сайта и имя домена. В ответ получите «ID приложения» и «Защищенный ключ».

Добавьте их в settings.py, пример:

VK_APP_ID = ‘1234567’ VKONTAKTE_APP_ID = VK_APP_ID VK_API_SECRET = ‘Q0owlQESOXRYd2lcgnLa’ VKONTAKTE_APP_SECRET = VK_API_SECRET

Для чего дублировать переменные, я спрашивал в блоге автора и получил ответ. Также смотрите документацию по бекенду.

Как найти свой id и auth key

Google+

Зайдите на страницу https://code.google.com/apis/console/ , нажмите Create, введите требуемые данные и во вкладке API Access увидите «Client ID» и «Client secret».

Добавьте их в settings.py, пример:

GOOGLE_OAUTH2_CLIENT_ID = ‘123456789.apps.googleusercontent.com’ GOOGLE_OAUTH2_CLIENT_SECRET = ‘p0dJSDjs-dAJsdSAdaSDadasdrt’

GitHub

Зайдите на страницу https://github.com/settings/applications/new и введите логин и пароль от вашей учетной записи в GitHub. Введите имя приложения, адреса сайта для «URL» и «Callback URL» (у меня это один адрес корневой страницы сайта). И получите «Client ID» и «Client Secret», после чего добавьте их в settings.py:

Еще по теме:  Игры стрелялки как Вконтакте

GITHUB_APP_ID = ‘da3bad06987041629b96’ GITHUB_API_SECRET = ‘8bb53dd4a0b1bbc12f77e147c11d5fd6082adb8d’

Теперь перейдем к настройке social_auth.

Установка и настройка django-social-auth

Для начала установим приложение:

pip install django-social-auth

Теперь отредактируйте settings.py:

# Добавляем в AUTHENTICATION_BACKENDS нужные бекенды, # смотрите полный список https://github.com/omab/django-social-auth/blob/master/doc/configuration.rst AUTHENTICATION_BACKENDS = ( ‘social_auth.backends.twitter.TwitterBackend’, ‘social_auth.backends.facebook.FacebookBackend’, ‘social_auth.backends.contrib.vk.VKOAuth2Backend’, ‘social_auth.backends.google.GoogleOAuth2Backend’, ‘social_auth.backends.contrib.github.GithubBackend’, ‘django.contrib.auth.backends.ModelBackend’, ) # Добавляем в TEMPLATE_CONTEXT_PROCESSORS процессор «social_auth_by_name_backends» TEMPLATE_CONTEXT_PROCESSORS = ( ‘django.contrib.auth.context_processors.auth’, ‘django.core.context_processors.request’, ‘social_auth.context_processors.social_auth_by_name_backends’, ) # И добавляем «social_auth» в INSTALLED_APPS INSTALLED_APPS = ( . ‘social_auth’, )

Дополнительные настройки social_auth, добавьте в settings.py:

import random # Если имя не удалось получить, то можно его сгенерировать SOCIAL_AUTH_DEFAULT_USERNAME = lambda: random.choice([‘Darth_Vader’, ‘Obi-Wan_Kenobi’, ‘R2-D2’, ‘C-3PO’, ‘Yoda’]) # Разрешаем создавать пользователей через social_auth SOCIAL_AUTH_CREATE_USERS = True # Перечислим pipeline, которые последовательно буду обрабатывать респонс SOCIAL_AUTH_PIPELINE = ( # Получает по backend и uid инстансы social_user и user ‘social_auth.backends.pipeline.social.social_auth_user’, # Получает по user.email инстанс пользователя и заменяет собой тот, который получили выше. # Кстати, email выдает только Facebook и GitHub, а Vkontakte и Twitter не выдают ‘social_auth.backends.pipeline.associate.associate_by_email’, # Пытается собрать правильный username, на основе уже имеющихся данных ‘social_auth.backends.pipeline.user.get_username’, # Создает нового пользователя, если такого еще нет ‘social_auth.backends.pipeline.user.create_user’, # Пытается связать аккаунты ‘social_auth.backends.pipeline.social.associate_user’, # Получает и обновляет social_user.extra_data ‘social_auth.backends.pipeline.social.load_extra_data’, # Обновляет инстанс user дополнительными данными с бекенда ‘social_auth.backends.pipeline.user.update_user_details’ )

Подключите роуты в urls.py:

urlpatterns = patterns(», . url(r», include(‘social_auth.urls’)), )
./manage.py syncdb ./manage.py migrate social_auth

Документацию можно посмотреть тут:

  • Основная документация
  • Документаци по pipeline

Виджет для вывода кнопочек

Это просто шаблонный inclusion-тег, который выводит ссылочки в виде кнопочек-логотипов социальных сетей

Сам виджет я не стал публиковать в PyPI, так как не считаю это важным, вам следует просто скопировать исходники отсюда https://github.com/adw0rd/django-social-auth-widget

После чего добавьте в settings.py следующий список:

SOCIAL_AUTH_PROVIDERS = [ ‘id’: p[0], ‘name’: p[1], ‘position’: ‘width’: p[2][0], ‘height’: p[2][1], >> for p in ( (‘github’, u’Login via GitHub’, (0, -70)), (‘facebook’, u’Login via Facebook’, (0, 0)), (‘twitter’, u’Login via Twitter’, (0, -35)), ) ]

В вашем шаблоне с формой авторизации использовать так:

load social_auth_widget %> form action=»» method=»post»> input name=»username» /> input name=»password» /> input type=»submit» value=»Sign in» /> form>

Обновление аватарок при авторизации

В статье Django Social Auth: now with images имеется пример как через сигналы обновлять аватарку пользователю, на мой вгляд, код служит только для примера.

Источник: indigotlt.ru

Создаём универсальный класс взаимодействия с вашим сервером

Здесь обсуждать нечего если вы хоть чуть — чуть знакомы с PHP
Теперь получим обязательные данные которые нужны скрипту :

$uid = $_POST[‘viewer_id’];$auth = $_POST[‘auth_key’];$act = $_POST[‘act’];$key = $_POST[‘key’];

  • $uid — ID пользователя в вк
    $auth — auth_key пользователя
    $act — наша переменная обозначающая что мы хотим делать
    $key — ключ защиты переменной act

>else< //Ошибка в key (скорее всего подмена данных >>else?>

Если вы не поняли что делает этот каркас, значит вам надо учить PHP
Итак продолжим реализацию :
Теперь нам надо записать пользователя в БД, код представлен ниже :

$result = mysql_query(‘INSERT INTO `users` (`uid`, `last_enter`) VALUES («‘.$uid.'»,»‘.time().'») ON DUPLICATE KEY UPDATE `last_enter` = «‘.time().'»;’);if (!$result)else

Обсудим что я сотворил выше
Я делаю запрос на занесение пользователя в базу и в случае ошибки выдаю пользователю в виде JSON ответа.
Думаю ничего сложного в этом нет поэтому приступим к рассмотрению второго вида акта : GET_USER_INFO
Я не буду разъяснять что мы делаем в этом акте т.к. это за меня сделал Александр (Тыц чтобы посмотреть урок) поэтому вот код :

Еще по теме:  Как создать страницу в ВК без номера

$result = mysql_query(‘SELECT * FROM `users` WHERE `uid`=’.$uid.’;’);if (!$result)else’);>

  • 1. money — это сколько надо добавить денег
    2. rait — это сколько надо добавить рейтинга
    3. checker — это хэш данных (защищает только money и rait и привязан к auth_key)

$money = $_POST[‘m_add’]; //Внимание : я использовал именование m_add, r_add вместо money и rait$rait = $_POST[‘r_add’]; //$hash = $_POST[‘c_add’]; //c_add это checkerif (md5($money.$auth.$rait) == $hash)< $result = mysql_query(‘UPDATE `users` SET `money` = `money` + «‘.$money.'», `rait` = `rait` + «‘.$rait.'» WHERE `uid`=’.$uid.’;’); if (!$result) < exit(»); >else< //Обновляем данные и выводим их $result_2 = mysql_query(‘SELECT * FROM `users` WHERE `uid`=’.$uid.’;’); if (!$result_2)< exit(»); >else< //Выводим обновлённые данные [код из акта 2] $data = mysql_fetch_assoc($result); //mysql_fetch_assoc потому что нам надо обращаться к переменныем таким способом : $data[‘money’]; //Создаём переменные которые надо вывести : $money = $data[‘money’]; $rait = $data[‘rait’]; $hash = md5(md5($money).md5($rait)); //Выводим результат exit(»); > >>else
Готово! Перед тем как приступить к клиенту напишем полный код файла core.php :
‘); >else< //Выводим что всё хорошо exit(»); > break; case «GET_USER_INFO»: //Получение данных $result = mysql_query(‘SELECT * FROM `users` WHERE `uid`=’.$uid.’;’); if (!$result)< //Ошибка mysql запроса выводим её в ответ : exit(»); >else< $data = mysql_fetch_assoc($result); //mysql_fetch_assoc потому что нам надо обращаться к переменныем таким способом : $data[‘money’]; //Создаём переменные которые надо вывести : $money = $data[‘money’]; $rait = $data[‘rait’]; $hash = md5(md5($money).md5($rait)); //Выводим результат exit(»); > break; case «UPDATE_USER_INFO»: //Обновление данных $money = $_POST[‘m_add’]; //Внимание : я использовал именование m_add, r_add вместо money и rait $rait = $_POST[‘r_add’]; // $hash = $_POST[‘c_add’]; //c_add это checker if (md5($money.$auth.$rait) == $hash)< $result = mysql_query(‘UPDATE `users` SET `money` = `money` + «‘.$money.'», `rait` = `rait` + «‘.$rait.'» WHERE `uid`=’.$uid.’;’); if (!$result) < exit(»); >else< //Обновляем данные и выводим их $result_2 = mysql_query(‘SELECT * FROM `users` WHERE `uid`=’.$uid.’;’); if (!$result_2)< exit(»); >else< //Выводим обновлённые данные [код из акта 2] $data = mysql_fetch_assoc($result); //mysql_fetch_assoc потому что нам надо обращаться к переменныем таким способом : $data[‘money’]; //Создаём переменные которые надо вывести : $money = $data[‘money’]; $rait = $data[‘rait’]; $hash = md5(md5($money).md5($rait)); //Выводим результат exit(»); > > >else< //Попытка обмана exit(»); > break; default: //Неизвестный акт exit(»); break; > >else< //Ошибка в key (скорее всего подмена данных exit(»); >>else?>

Просмотрите этот код внимательно, теперь мы приступаем к клиенту.
[шаг 4: пишем клиент]
Я не буду описывать весь процесс создания приложения поэтому приведу ниже код и расскажу о некоторых особенностях.

Файл [b]ServerAPI.as[/b] :package < import flash.net.*; import flash.events.*; import vk.api.MD5; import vk.api.serialization.json.JSON; public class ServerAPI < private var server:String = null; private var uid:String = null; private var auth:String = null; public function ServerAPI(parms:Object) < server = parms.url; uid = parms.uid; auth = parms.auth; >public function Executure(parms:Object) < /* Код представленный ниже взят из основы написанной в данной теме : http://flapps.ru/forum/topic165.html */ var core_loader:URLLoader = new URLLoader(); var core_request_URLRequest=new URLRequest(server + «core.php»); core_request.method=URLRequestMethod.POST; switch (parms.act) < case «AUTH_USR»: core_vars[‘viewer_id’] = uid; core_vars[‘auth_key’] = auth; core_vars[‘act’] = parms.act; core_vars[‘key’] = MD5.encrypt(MD5.encrypt(parms.act) + MD5.encrypt(auth) + MD5.encrypt(uid)); //Больше параметров нет break; case «GET_USER_INFO»: core_vars[‘viewer_id’] = uid; core_vars[‘auth_key’] = auth; core_vars[‘act’] = parms.act; core_vars[‘key’] = MD5.encrypt(MD5.encrypt(parms.act) + MD5.encrypt(auth) + MD5.encrypt(uid)); //Больше параметров нет break; case «UPDATE_USER_INFO»: core_vars[‘viewer_id’] = uid; core_vars[‘auth_key’] = auth; core_vars[‘act’] = parms.act; core_vars[‘key’] = MD5.encrypt(MD5.encrypt(parms.act) + MD5.encrypt(auth) + MD5.encrypt(uid)); //Прочие параметры core_vars[‘m_add’] = parms.money; core_vars[‘r_add’] = parms.rait; core_vars[‘c_add’] = MD5.encrypt(parms.money + auth + parms.rait); break; default: throw new Error(«Act is not valid»); break; >var core_vars:URLVariables = new URLVariables(); core_request.data=core_vars; core_loader.addEventListener(Event.COMPLETE, function(e:Event)< trace(e.target.data); //Для отладки var data:Object = JSON.decode(e.target.data); if (data[‘error’] == ‘0’)< //Ошибок нет parms.onComplete(data); >else < parms.onError(data); >>); core_loader.addEventListener(IOErrorEvent.IO_ERROR, function(e:Event)< //Если ошибка из — за отсуствия доступа к скрипту parms.onError(); //Даём понять что ошибка не в скрипте >); core_loader.load(core_request); > >>

  • 1. Только 1 аргумент во всех функциях (включая конструктор)
    2. Обработка всех основных событий
    3. Дополняемость класса (вы можете дописать класс или переделать его)
Еще по теме:  Как оформить страницу в ВК бровисту

var net:ServerAPI = new ServerAPI(); net.Executure(, onError: function(data:Object) < //Ошибка >>);

Ну вот и всё. Для тех кто знает азы и изучал уроки на этом форуме будет не сложно разобраться с кодом.
От себя : Поздравляю всех с днём знаний
P.S. В данном уроке я не рассмотрел проверку времени последнего захода (защита от частых заходов). Это будет ваша домашняя работа

Источник: flapps.ru

Что такое ID, UID? Подробно об идентификаторах

Идентификатор - ID

В этом уроке мы разберемся, что такое идентификаторы: (ID, UID, УИД). Эти аббревиатуры часто встречаются в теме информационной безопасности, которую мы начинаем осваивать в новой серии IT-уроков.

Что такое ID?

ID (читается «ай-ди») — это часть английского слова “identifier”, которое переводится как “идентификатор”.

ID или Идентификатор — это информация, которая может идентифицировать субъект (простыми словами — это номер или имя: число или строка символов).

Каждый раз, когда вы где-то регистрируетесь, вы получаете идентификатор, то есть, какое-то имя или номер. И внутри каждой отдельной системы ваш идентификатор уникальный.

Примеры идентификаторов (id):

Пример ID страницы ВКонтакте

Пример ID страницы в социальной сети ВКонтакте

Знакомясь с человеком мы в первую очередь спрашиваем его имя, а для связи просим сообщить номер телефона или e-mail, то есть, узнаем его идентификаторы (сюда же можно отнести номер машины, номер паспорта, номер банковской карты, штрих-код и т.д.)

Что такое UID?

Часто встречается надпись “UID”, в которой перед “ID” добавлена буква “U”, которая может быть расшифрована как “unique” — “уникальный”, или как “user” — “пользователь”.

Следовательно, есть два варианта расшифровки аббревиатуры UID:

UID (Unique identifier) или УИД — уникальный идентификатор.

UID (User identifier) — идентификатор пользователя в операционной системе или на сайте.

Всё просто: некоторые идентификаторы являются уникальными, то есть могут принадлежать только одному субъекту (имя может совпадать, а номер паспорта всегда отличается).

Примеры использования UID:

  • уникальные идентификаторы применяются в ж/д билетах в качестве уникального идентификатора заказа
  • в системе оплаты общественного транспорта Москвы используется индивидуальный заводской серийный номер карты
  • В программах компании “1С” используется УИД — свойство ссылки с типом УникальныйИдентификатор
  • В платежных документах государственных учреждений используется уникальный идентификатор начисления УИН (например, УИН12345678901234567890///)
  • UNIX-подобные операционные системы различают пользователя по его номеру, который обозначается, как UID
  • Некоторые сайты также используют аббревиатурой UID, указывая, что данный идентификатор относится именно к пользователю

ID с точки зрения информационной безопасности

Обычно идентификатор (id) не является секретным, поэтому только по нему нельзя предоставлять доступ к ресурсу (например, знание адреса электронной почты не даёт права доступа к письмам в почтовом ящике).

Определение идентификатора (идентификация) является первым шагом для доступа к информационным ресурсам (почта, аккаунт в социальной сети и т.д.), далее выполняется аутентификация и авторизация, но об этом мы поговорим в следующем IT-уроке.

Копирование запрещено, но можно делиться ссылками:

Источник: it-uroki.ru

Рейтинг
( Пока оценок нет )
Загрузка ...