src initial commit 4 months ago
README.md initial commit 4 months ago
pom.xml initial commit 4 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!!