Библиотека протестирована на Java 11 и Tomcat 9.0.
Для реализации аутентификации OAuth2 VK ID в Вашем приложении сперва необходимо зарегистрировать его в личном кабинете разработчика VK:
- Перейти по ссылке https://id.vk.com/about/business/go
- Нажать "Добавить приложение"
- Ввести название Вашего приложения и среди типов платформ включить как минимум "Web".
- (Опционально) Загрузить изображение приложения, которое будет отображаться в личном кабинете пользователя
- Нажать "Далее"
- Заполнить поля "Базовый домен" и "Доверенный Redirect URL". Подсказки о них есть рядом с полями ввода
- Подтвердить действие SMS-кодом, если требуется (или другие способы подтверждения личности в зависимости от Ваших настроек VK)
- На шаге "Способы быстрого входа в web-приложении" можно выбрать все три способа.
- (Опционально) На шаге "Интеграция элементов" можно настроить внешний вид по своему вкусу. Вставку кода можно пропустить.
Вы окажетесь на странице 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!!
Архитектура Мы написали с нуля свой провайдер, а не использовали OAuth2Provider, потому что он плохо документирован.