В настоящее время социальные сети играют ключевую роль в жизни людей. Более того, многие предприниматели используют социальные сети для продвижения своих товаров и услуг. В этой связи, необходимо уметь взаимодействовать с социальными сетями и проводить авторизацию пользователей на сайте или приложении через социальные сети.
Одна из наиболее популярных социальных сетей — ВКонтакте. И мы расскажем как провести авторизацию ВКонтакте через OAuth.
OAuth – это открытый протокол, который используется для авторизации пользователей на сторонних сайтах через социальные сети. OAuth позволяет предоставить доступ к определенным данным пользователя, такие как: имя, фамилия, электронная почта, фотографии и многое другое.
Для начала работы нам нужно зарегистрировать приложение в ВКонтакте. Для этого перейдем по следующей ссылке https://vk.com/apps?act=manage. И нажмем на кнопку «Создать приложение».
Далее, заполняем форму регистрации.
В поле «Платформы» выбираем «Веб-сайт».
Что такое OAuth 2.0 и OpenID Connect за 15 минут
После этого, переходим на закладку «Настройки». Здесь мы видим необходимые данные для авторизации.
access_token — это ключ доступа, необходимый для работы с API ВКонтакте. Мы получим его после прохождения процедуры авторизации.
client_id — это идентификатор приложения ВКонтакте, в котором мы зарегистрировались.
scope — это список прав доступа, которые мы запрашиваем у пользователя при авторизации.
secret_key — это секретный ключ приложения ВКонтакте, который необходим для создания подписи.
redirect_uri — это URL-адрес, на который пользователь будет перенаправлен после успешной авторизации.
Далее, необходимо подготовить страницу, на которой будет размещена кнопка для авторизации через ВКонтакте.
HTML-код для кнопки можно получить с помощью следующего кода:
Вставляем этот код на страницу и продолжаем разработку на серверной стороне.
Для регистрации кода доступа (access token) необходимо отправить запрос на сервер ВКонтакте. Для этого нужно использовать следующий URL:
https://oauth.vk.com/access_token?client_id=redirect_uri= ‘client_id’: , ‘client_secret’: », ‘redirect_uri’: », ‘code’: » > response = requests.get(url, params=params) print(response.json())
В результате выполнения кода мы получим объект JSON с полями access_token, user_id и другими.
Для запросов к API ВКонтакте необходимо создать объект vk с помощью библиотеки vk_api:
import vk_api vk_session = vk_api.VkApi(token=») vk = vk_session.get_api() user = vk.users.get()[0] print(user[‘first_name’], user[‘last_name’])
В примере мы получаем имя и фамилию текущего пользователя и выводим их на экран.
В этой статье мы рассмотрели как провести авторизацию ВКонтакте через OAuth на стороннем сайте. Для этого мы зарегистрировали приложение в ВКонтакте, подготовили страницу с кнопкой авторизации, осуществили запрос на сервер ВКонтакте для получения доступа, и в конечном итоге получили имя и фамилию текущего пользователя. Надеюсь, эта статья помогла вам понять, как работать с API ВКонтакте и в будущем вы сможете успешно использовать авторизацию через ВКонтакте на своих сайтах и приложениях.
Как работает OAuth 2 — введение (просто и понятно)
Похожие записи:
- OAuth 2.0 авторизация в JavaScript
- Аутентификация и авторизация на PHP (OAuth, JWT)
- Использование OAuth и OpenID в PHP: авторизация через социальные сети.
- OAuth: авторизация через социальные сети на Ruby
- OAuth 2.0: авторизация через соцсети на Ruby.
Источник: qaa-engineer.ru
Принцип работы Oauth2
Теперь вопросы которые возникли у меня, кроме главного (правильно ли я вообще понимаю).
- Если перехватить токен, то можно использовать его как тот же пароль. В чем тогда преимущество? Можно ограничить ресурсы разными токенами? Он временный и через некоторое время уже будет недействительным, но если злоумышленник успеет сделать что-то раньше ?
- То есть передавать токен как и пароль нужно в пост запросе по HTTPS протоколу, чтобы защищать его как тот же пароль?
- Если я использую токен от Вконтакте как авторизацию на своем сайте, то каким образом поучать новый токен по истечению срока действия старого, заново запрашивать » Вы разрешаете приложению . » через oauth сервер. Такого не встречал на сайтах, обычно один раз разрешил и все.
- Данные способ авторизации удобен когда у пользователя есть какой-то глобальный аккаунт на доверенном сервере.Если же нужна авторизация на своем сервере только и без сторонних oauth серверов, следует использовать похожий принцип просто, при первой авторизации один раз передавать логин и пароль по HTTPS и получать токен уже непосредственно у сервера. Допустим интернет магазин и клиент Android.Первый раз логин и пароль, в ответ прилетает токен и доступ к API производить уже передавая этот токен.
- Регистрация приложения является дополнительным уровнем безопасности, то есть чтобы не все могли попросить пользователя разрешить им доступ и получить токен.
- Если приложение допускает авторизацию, как прямо на самом сервер (интернет магазин) так и через OAuth (вконтакте), то кто должен контроллировать время жизни токена во втором случае. В первом случае мы работаем непосредственно с нашими сервером(интернет магазин), а во втором случае мы передаем и используем токен полученный от внешнего сервера OAuth (vkontakte) каким образом нам нужно обновлять токен, просить об этом у oauth.vk.com или нам в данном Вконтакте больше не нужен, после выдачи первого токена и теперь сами на стороне сервера интернет магазина генеируем новые токены ?
Всем спасибо, кто дочитал это.
Скажите, правильно ли я вообще понимаю принцип работы? Если нет, то скажите пожалуйста где и что не так.
Источник: ru.stackoverflow.com
OAuth Vk.com: что это такое, как убрать
VK требует, чтобы в запросе Access-токена Сlient Сredentials передавались не в Basic Auth в заголовке Authorization (как у большинства провайдеров), а в теле запроса. Но перенести Сlient Сredentials в тело запроса просто — настройкой в application.properties:
То есть поведение по умолчанию было таким:
Будет не так
А будет другим — Client Credentials уйдут в тело запроса.
В ответе отсутствует token_type: Bearer
Запрос изменили, но с ответом тоже не все ладно. В ответном JSON отсутствует пункт «token_type»:»Bearer»:
А Spring ожидает, что token_type должен быть непустым и выбрасывает исключение. Поэтому ниже мы модифицируем ответ с помощью CustomTokenResponseConverter.
После успешного получения Access Token-а по протоколу OpenID идет обращение за данными авторизовавшегося пользователя. Это конечная точка Userinfo провайдера. Тут ответ тоже нестандартный.
VK возвращает по адресу Userinfo ответ в обертке
Обычно в ответе сразу перечисляются атрибуты пользователя, но не в VK. Здесь ответ приходит обернутым в response и еще в массив: