Интеграция Apache Oltu и Shiro.
Предоставление лёгкого в использовании фреймворка для приложений OAuth2.
Реализован с учётом различных сценариев использования (например, веб-приложения, мобильные устройства).
Этот проект аналогичен проекту spring-oauth-server по требованиям и сценариям использования. Разница заключается в используемых технологиях: spring-oauth-server использует Spring Security + spring-security-oauth2, а oauth2-oltu имеет следующие особенности:
-
Более прозрачный: каждый шаг реализации имеет доступный для просмотра и более понятный исходный код.
-
Больше возможностей для настройки и расширения: можно настраивать содержимое или формат сообщений об ошибках, добавлять дополнительную логику обработки запросов и т. д.
-
Лучшая читаемость: благодаря отсутствию Spring Security у Shiro и Oltu, весь код представляет собой обычные контроллеры или Java Beans для бизнес-логики, что делает его более читаемым и понятным.
-
Модульность: благодаря модульной структуре Oltu, authz и resources разделены на отдельные модули, которые можно объединять в одном проекте или разделять на разные модули в зависимости от потребностей.
Рекомендуется: реализация следующего поколения аутентификации и авторизации на основе протокола OIDC: MyOIDC.
Основные технологии и версии
— Spring Boot — 2.4.13;
— oltu — 1.0.2;
— shiro — 1.11.0;
— MySQL — 5.6+.
Среда разработки
JDK — 1.8.0_40;
Maven — 3.6.0;
MySQL — 5.7.22.
Описание модулей проекта
Проект oauth2-shiro использует модульную разработку для достижения цели высокой связности и низкой связанности, что лучше соответствует потребностям реальных проектов. Он состоит из трёх модулей: authz, core и resources.
- Модуль authz реализует логику получения токена с использованием различных типов grant_type.
- Модуль core содержит общие компоненты, такие как определение ClientDetails и AccessToken, и используется другими модулями.
- Ресурсный модуль resources управляет ресурсами (URI), защищёнными OAuth2, используя access_token.
Онлайн-тестирование
Модуль authz: https://andaily.com/authz/ (v0.2).
Ресурсный модуль: https://andaily.com/rs/ (v0.2).
Версия Redis
Существует две версии с использованием Redis:
- Redis + MySQL: https://gitee.com/mkk/oauth2-shiro-redis.
- Только Redis: https://gitee.com/mkk/oauth2-shiro-redis/tree/redis/.
В версии Redis данные токена хранятся в Redis, и срок действия данных автоматически истекает с помощью функции TTL, обеспечивая более высокую производительность.
Как использовать
- Проект управляется Maven, поэтому необходимо установить Maven локально (версия для разработки — 3.6.0) и базу данных MySQL (версия для разработки — 5.7.22).
- Скачайте или клонируйте проект на локальный компьютер.
- Проект состоит из трёх модулей (core, authz, resources), где core — это Java-проект (jar), а authz и resources — проекты SpringBoot (.jar).
- Создайте базу данных MySQL с именем oauth2_shiro и запустите соответствующие сценарии SQL (файлы находятся в каталоге others/database). Для запуска тестов также потребуется создать базу данных oauth2_shiro_test и запустить сценарии SQL.
- Измените файлы конфигурации application.properties в модулях authz (в src/main/resources) и resources (также в src/main/resources), чтобы настроить подключение к базе данных oauth2_shiro.
- Импортируйте проект в IDE (например, Intellij IDEA) и запустите сервис.
- Запустите серверы authz (порт по умолчанию — 8080, класс запуска — AuthzApplication.java) и resources (порт по умолчанию — 8083, класс запуска — ResourcesApplication.java). Проверьте журналы консоли или файлы журналов в папке logs/.
- Также можно скомпилировать проект с помощью команды maven package, чтобы получить jar-файлы SpringBoot (authz.jar и rs.jar). При компиляции обратите внимание на информацию о подключении к базе данных в файлах pom.xml каждого модуля. Можно добавить -Dmaven.test.skip=true в команду Maven, чтобы пропустить тесты. Затем запустите jar-файлы с помощью java -jar.
- Посетите адрес authz в браузере: http://localhost:8080 для онлайн-тестирования или используйте postman для тестирования, следуя содержимому файла oauth_test.txt в каталоге others.
Поддерживаемые grant_types
OAuth2 grant_types, поддерживаемые проектом oauth2-shiro, и их функции:
-
authorization_code — режим кода авторизации (сначала логин для получения code, затем получение token).
-
password — режим пароля (передаются имя пользователя и пароль для прямого получения token). Не рекомендуется
-
refresh_token — обновляет access_token.
-
implicit (token) — упрощённый режим (токен передаётся в Hash redirect_uri; Auth-клиент работает в браузере, например, JS, Flash). Не рекомендуется.
-
client_credentials — клиентский режим (без пользователя, пользователь регистрируется на клиенте, затем клиент получает ресурсы от имени «сервера» от сервера).
В OAuth 2.1 повышена безопасность использования grant_type (например, не рекомендуется использовать password). Подробнее об изменениях можно узнать в статье «OAuth 2.1: состояние и основные характеристики».
План разработки
С версии 0.2 все планы по разработке проекта публикуются для удобства отслеживания и приглашения к участию. Для управления разработкой проекта используется открытый проект andaily-developer.
План внедрения Spring-Boot:
-
Версия: 2.0.1 [план].
Дата: --- / ---.
-
Версия: 2.0.0 [завершено].
Дата: 2020-07-05 / 2023-09-28.
- Обновлена структура проекта с использованием Spring Boot, thymeleaf вместо servlet/jsp, jar вместо war.
- Обновлено использование JDK 1.8, logback вместо log4j (для решения проблемы безопасности log4j).
- Поддержка JWT для токена с возможностью контроля совместимости с предыдущими версиями через параметр authz.token.generator.type.
- Обновление shiro до версии v1.11.0.
- Улучшение безопасности хранения паролей с использованием SHA-256 и поддержки соли (через параметр authz.store.credentials.alg).
- Использование более безопасного пароля для начального аккаунта, включая прописные и строчные буквы, цифры и специальные символы, длину не менее 10 символов.
-
Версия: 0.3 [завершено].
Дата: 2016-07-16 / 2018-10-17.
- Обновление oltu до версии 1.0.2 и завершение тестирования (152).
- Попытка добавления и реализации OIDC в oauth2-shiro (отменена) (153).
- Добавление необходимых комментариев кода и комментариев конфигурации для улучшения понимания (161).
- В режиме implicit не требуется client_secret.
-
Версия: 0.2 [завершено].
Дата: 2016-05-26 / 2016-07-03.
- Обновлён интерфейс главной страницы, следуя spring-oauth-server (66).
- Обзор сведений о клиенте (67).
- Тестирование сведений о клиенте (68).
- Просмотр и редактирование пользователей (69).
- Добавлены API-инструкции с примерами различных сценариев (70).
- Публикация на тестовом сервере (71).
- Обновлены инструкции по интерфейсу модуля ресурсов (72).
Проектные новости
- 2015-05-17 — начало проекта, начало отправки кода (частное).
- 2015-07-16 — статья о состоянии разработки проекта oauth2-shiro за июль.
- 2015-09-06 — статья о состоянии разработки проекта oauth2-shiro за август.
- 2015-09-06 — проект стал открытым, началась разработка модуля ресурсов.
- 2015-09-26 — завершена версия 0.1, выпущена бета-версия 0.1-beta.
- 2015-10-07 — перестройка структуры проекта, выпуск версии 0.1-rc.
- 2016-05-26 — начало разработки версии 0.2.
- 2016-07-02 — добавление онлайн-тестовой среды.
- 2016-08-17 — выпуск версии 0.2.
- 2017-01-21 — добавлен в GitHub, адрес Git@OSC: http://git.oschina.net/mkk/oauth2-shiro.
Комментарии ( 0 )