.idea initial commit 10 months ago
src initial commit 10 months ago
target initial commit 10 months ago
README.md initial commit 10 months ago
pom.xml initial commit 10 months ago
README.md

Было решено написать эту библиотеку по причине того, что документация Spring Security не удовлетворяла нашим требованиям. Библиотека протестирована на Java 11.

Для реализации аутентификации OAuth2 VK ID в Вашем приложении сперва необходимо зарегистрировать его в личном кабинете разработчика VK:

  1. Перейти по ссылке https://id.vk.com/about/business/go
  2. Нажать "Добавить приложение"
  3. Ввести название Вашего приложения и среди типов платформ включить как минимум "Web".
  4. (Опционально) Загрузить изображение приложения, которое будет отображаться в личном кабинете пользователя
  5. Нажать "Далее"
  6. Заполнить поля "Базовый домен" и "Доверенный Redirect URL". Подсказки о них есть рядом с полями ввода
  7. Подтвердить действие SMS-кодом, если требуется (или другие способы подтверждения личности в зависимости от Ваших настроек VK)
  8. На шаге "Способы быстрого входа в web-приложении" можно выбрать все три способа.
  9. (Опционально) На шаге "Интеграция элементов" можно настроить внешний вид по своему вкусу. Вставку кода можно пропустить.

Вы окажетесь на странице https://id.vk.com/about/business/go/accounts/{some_id}}/apps/{your_app_id}/edit Отсюда Вам понадобятся ID приложения и Redirect URL.

Дальше можно переходить к работе непосредственно с библиотекой:

Сначала Вам необходимо в Вашем приложении создать бин класса VkSettings, передав ему две настройки:

  • clientId
  • redirectUriГде эти две настройки - это сохраненные Вами ранее ID приложения и Redirect URL соответственно.

ПРИМЕЧАНИЕ: Далее вся конфигурация будет строиться на создании бинов Spring. В теории можно попробовать обойтись и без создания бинов этих классов и просто вручную создавать их экземпляры в коде, но такой вариант не проверялся на работоспособность.

Пример:

<beans:bean name="vkSettings" class="ru.simplex2.vkid_spring_security.vk.VkSettings">
<beans:property name="clientId" value="12345678"/>
<beans:property name="redirectUri" value="https://mycoolsite.ru/login/oauth2/code/vk"/>
</beans:bean>

Далее необходимо зарегистрировать в Вашем приложении два фильтра:

  • VkBeginAuthFilter
  • VkEndAuthFilter

Оба фильтра нужно зарегистрировать в качестве бинов Spring, передавая им в параметры один и тот же экземпляр класса VkSettings.

springSecurity.xml:

<beans:bean name="vkBeginAuthFilter" class="ru.simplex2.vkid_spring_security.vk.VkBeginAuthFilter">
    <beans:constructor-arg ref="vkSettings"/>
</beans:bean>
<beans:bean name="vkEndAuthFilter" class="ru.simplex2.vkid_spring_security.vk.VkEndAuthFilter">
    <beans:constructor-arg ref="vkSettings"/>
</beans:bean>

Второй фильтр должен срабатывать после первого. Этого можно достичь следующим образом

springSecurity.xml:

<http use-expressions="true">
    <custom-filter ref="vkEndAuthFilter" before="BASIC_AUTH_FILTER"/>
</http>

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

web.xml:

<filter>
    <filter-name>vkBeginAuthFilter</filter-name>
    <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
</filter>
<filter-mapping>
    <filter-name>vkBeginAuthFilter</filter-name>
    <url-pattern>/oauth2/authorization/vk</url-pattern>
</filter-mapping>

где "/oauth2/authorization/vk" - адрес, по которому нужно будет переходить для начала процесса аутентификации.

В результате успешной аутентификации возвращается объект VkUser с полями, заполненными информацией пользователя VK.

?????

PROFIT!!