1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/tomsun28-usthe

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
Внести вклад в разработку кода
Синхронизировать код
Отмена
Подсказка: Поскольку Git не поддерживает пустые директории, создание директории приведёт к созданию пустого файла .keep.
Loading...
README.md

Рекомендация высокопроизводительной системы аутентификации и авторизации для REST API — Sureness

Официальный сайт Sureness Репозиторий Gitee Репозиторий GitHub

Приветствуем вас в проекте Sureness! Если вам понравился проект, пожалуйста, оставьте звездочку, чтобы поддержать нас!

Также приветствуем всех интересующихся Sureness! Если вы хотите принять участие в развитии, присоединяйтесь к нашему QQ-чату: 390083213

📫 Введение

В современной архитектуре с разделением клиентской и серверной части, эффективная и быстрая система аутентификации и авторизации для защиты предоставленных REST API становится особенно важной. Однако существующие системы, такие как Apache Shiro, который не имеет нативной поддержки RESTful, или Spring Security, которая глубоко связана с Spring, не всегда отвечают нашим требованиям.

Именно поэтому была создана система Sureness, которая предоставляет решение для этих проблем, предлагая систему аутентификации и авторизации, ориентированную на REST API, без зависимости от конкретных фреймворков, возможность динамического изменения прав доступа, поддержку нескольких стратегий аутентификации, более высокую скорость работы и легкость использования и расширения.## 🎡 Описание

Sureness — это система аутентификации и авторизации, созданная после глубокого использования Apache Shiro, с учётом его преимуществ и новых требований.

Ориентирована на аутентификацию и авторизацию для REST API, основана на модели RBAC (пользователи-роли-ресурсы) и сосредоточена на обеспечении безопасности API.

Независима от конкретных web-фреймворков (уже есть примеры интеграции с Spring Boot, Quarkus, Javalin, Ktor, Micronaut, JFinal, Solon и др.)

Поддерживает динамическое изменение конфигураций прав доступа (можно динамически менять права доступа для каждого API)

Поддерживает различные стратегии аутентификации (JWT, Basic Auth, Digest Auth и т.д.), а также возможность расширения и создания собственных методов аутентификации

Обладает высокой производительностью благодаря улучшенной структуре дерева словарей

Предоставляет хорошие возможности для расширения, с примерами и документацией для быстрого понимания и применения

Низкая конфигурация, легкое расширение и отсутствие привязки к другим фреймворкам позволяют Sureness быстро и безопасно защищать различные сценарии использования##### 🔍 Сравнение| ~ | уверенность | shiro | spring security | | --- | --- | --- | --- | | Поддержка нескольких фреймворков | Поддерживается | Нужна доработка для поддержки | Не поддерживается | | Поддержка RESTful API | Поддерживается | Нужна доработка для поддержки | Поддерживается | | WebSocket | Поддерживается | Не поддерживается | Не поддерживается | | Соответствие цепочкам фильтров | Оптимизированное дерево для соответствия | Ант-соответствие | Ант-соответствие | | Поддержка аннотаций | Поддерживается | Поддерживается | Поддерживается | | Servlet | Поддерживается | Поддерживается | Поддерживается | | JAX-RS | Поддерживается | Не поддерживается | Не поддерживается | | Динамическое изменение прав доступа | Поддерживается | Нужна доработка для поддержки | Нужна доработка для поддержки | | Производительность/скорость | Быстро | Медленнее | Медленнее | | Кривая обучения | Простая | Простая | Крутая |##### ✌ Примеры поддержки- [x] Пример интеграции Spring Boot с Sureness (вариант конфигурационного файла) sample-bootstrap

  • Пример интеграции Spring Boot с Sureness (вариант базы данных) sample-tom
  • Пример интеграции Quarkus с Sureness sample-quarkus
  • Пример интеграции Javalin с Sureness sample-javalin
  • Пример интеграции Ktor с Sureness sample-ktor
  • Пример интеграции Spring WebFlux с Sureness sample-spring-webflux
  • Пример интеграции Micronaut с Sureness sample-micronaut
  • Пример интеграции JFinal с Sureness sample-jfinal
  • Пример интеграции Solon с Sureness sample-solon
  • Пример интеграции Spring Gateway с Sureness sample-spring-gateway
  • Пример интеграции Zuul с Sureness sample-zuul
  • Пример использования Session в Sureness sureness-session
  • Пример распределённого кэширования Session с Redis в Sureness sureness-redis-session
  • Больше примеров в процессе подготовки

usthe- usthe это frontend системы управления доступом и правами для stateless аутентификации RESTful URL, основанной на angular+typescript+adminlte, backend bootshiro

  • В отличие от обычных решений, предоставляет возможность конфигурирования страниц, динамического управления безопасностью RESTful API

  • Защищает приложение за счет динамической шифровки передачи данных, автоматического обновления JWT при истечении срока действия, мониторинга действий пользователя и других мер безопасности## Использование и некоторые соглашения
    --------- После того как вы создали api в backend с использованием этого проекта, вам потребуется добавить новый api в frontend странице в разделе Ресурсная конфигурация -> Управление API с использованием стиля совпадения ant (необходимо отметить, что незащищённые api, которые не были настроены, могут быть доступны всем).

  • Пример: Получение списка связанных пользователей для роли rest-url равно /role/user/{roleId}/{currentPage}/{pageSize}, метод доступа - GET. Вам следует добавить новый api в форме /role/user/*/*/* с методом доступа GET.

  • Согласно соглашению, цепочка совпадений url должна иметь вид url="url+==+httpMethod".

  • После добавления нового api на странице вам потребуется настроить его для авторизации в разделе Ресурсная конфигурация -> Управление ролями, где можно указать роли, которым будет предоставлен доступ к этому api, меню и связанным пользователям (по соглашению, api, который был назначен роли auth_anon, может быть доступен любому пользователю; обратите внимание, что api, который не был назначен ни одной роли, также может быть доступен любому пользователю).- Авторизованные меню были получены при первом входе в систему и сохранены в sessionStorage для предотвращения повторной загрузки. Для просмотра эффекта изменения меню после авторизации вам потребуется закрыть текущую страницу и открыть её заново (или очистить sessionStorage для автоматической загрузки новых данных).- Приятного использования

Основной архитектурный дизайн проекта:

Общая схема выглядит так:

image1


Передний конец uste

Основан на angular5 + angular-cli + TypeScript + RxJS + Bootstrap + AdminLTE, придерживается лучших практик Angular. В процессе использовались node.js и webpack, но я не очень знаком с ними.

Задний конец bootshiro

Основан на Spring Boot + Apache Shiro + MyBatis, имеет RESTful стиль API, с пользовательскими кодами состояния, JSON Web Token, пула соединений Druid, генерацию документации Swagger, Redis для хранения refresh token и динамических ключей, Maven, одностороннее шифрование MD5 и двустороннее AES и прочее...

Шлюз - Nginx

Этот Nginx используется как сервер обратного прокси, что решает проблему cross-origin, а также обеспечивает реальный IP-адрес (в настоящий момент серверная часть поддерживает cross-origin, поэтому Nginx может не понадобиться). Другой Nginx используется в качестве сервера приложений Angular, Tomcat — для bootshiro.

Файл конфигурации Nginx для обратного прокси можно найти здесь: конфиг

Непрерывная интеграция

Процесс выглядит так:

image2

Детальное описание технологии реализации доступно в другой статье: учебник Docker## Связанные документы


  1. Установите Nginx (не обязательно)
  • Здесь используется установка через Docker Nginx-Docker
  • Клонируйте вышеупомянутый репозиторий Nginx-Docker локально: git clone https://github.com/tomsun28/DockerFile.git
  • Перейдите в директорию Nginx и измените параметры в файле nginx.conf: IP адреса заднего конца bootshiro и переднего конца uste.
  • В директории Nginx создайте образ Nginx: docker build -t nginx:1.0 .
  • Запустите Nginx: docker run -d -p 80:80 --name nginx nginx:1.0
  1. Запуск IDE для отладки — создайте форк проекта в свой репозиторий (ваш star будет очень полезен ^.^)
  • Клонируйте проект локально: git clone https://gitee.com/yourName/usthe.git
  • Импортируйте проект в WebStorm
  • Требуется среда Node.js
  • Установите angular cli-инструмент: npm install -g @angular/cli@latest
  • Перейдите в директорию проекта: npm install
  • Измените apiBaseUrl в /src/environments/environments.ts на адрес API вашего сервера
  • Если используете nginx как прокси (apiBaseUrl — это адрес nginx, соглашение nginx-url+'/api/' является корневым url проекта, предоставляющего API; конкретные изменения можно сделать в файле nginx.conf)
  • Запустите приложение: ng serve
  • Предполагается, что backend bootshiro уже запущен
  • Откройте браузер и перейдите по адресу http://localhost:4200. Это локальное окружение для разработки можно использовать без nginx, но в продакшне лучше всё же его иметь
  1. Локальная установка Docker- Создайте форк проекта в свой репозиторий (ваши звездочки будут очень полезны^.^)
  • Клонируйте проект на локальную машину git clone https://gitee.com/yourName/usthe.git
  • Измените /src/environments/environments.prod.ts для указания базового URL API для продакшна
  • В корневой директории проекта выполните команду docker build -t usthe:1.0 .
  • Выполните docker images, чтобы проверить успешность создания образа
  • Запустите контейнер с помощью команды docker run -d -p gstl:4200 --name haiLady usthe:1.0
  • Выполните docker ps, чтобы проверить запущенный контейнер
  • Предполагается, что серверная часть bootshiro уже установлена
  • Откройте браузер и перейдите по адресу http://localhost:4300
  1. Jenkins + Docker для непрерывной интеграции и доставки (CI/CD)
  • Создайте форк проекта в свой репозиторий (ваши звездочки будут очень полезны^.^)
  • Клонируйте проект на локальную машину git clone https://gitee.com/yourName/usthe.git
  • Измените /src/environments/environments для указания базовых URL API для продакшна и разработки
  • Установка CI/CD окружения может занять некоторое время, посмотрите здесь
  • После завершения установки, в Jenkins для проекта usthe запустите следующий скрипт:
#!/bin/bash

# сборка в Jenkins shell

# URL для регистрации в Docker Hub, после чего созданный образ будет загружен в registry или Docker Hub
REGISTRY_URL=127.0.0.1:5000
# docker login --username tomsun28 --password xxxx

# генерация версии на основе текущего времени
TAG=$REGISTRY_URL/$JOB_NAME:`date +%y%m%d-%H%M`# Использование Dockerfile для создания образа
docker build -t $TAG $WORKSPACE/.

docker push $TAG
docker rmi $TAG

# Удаление ранее запущенного контейнера, если он существует
if docker ps -a | grep -i $JOB_NAME; then
docker rm -f $JOB_NAME
fi

# Запуск нового контейнера с использованием последнего созданного образа
docker run -d -p 4200:80 --name $JOB_NAME $TAG

Репозитории

gitee:

bootshiro
usthe

github:

bootshiro
usthe


Продолжаем обновление...

======================================

Пожалуйста, помогите улучшить этот проект^^



Примеры работы

image4

image5

image6

image7

Благодарности

Howieair за иконку свиньи
zhangkaitao за учебник "Следуй за мной Shiro"
Статьи и открытые проекты от наших коллег
Спасибо за поддержку открытых проектов!



jetBrains Спасибо JetBrains за поддержку открытого лицензионного программного обеспечения!

Комментарии ( 0 )

Вы можете оставить комментарий после Вход в систему

Введение

Бут Широ + устэ: система управления правами с разделением на фронтенд и бэкенд. Авторизация в модуле управления ролями. Развернуть Свернуть
MIT
Отмена

Обновления

Пока нет обновлений

Участники

все

Недавние действия

Загрузить больше
Больше нет результатов для загрузки
1
https://api.gitlife.ru/oschina-mirror/tomsun28-usthe.git
git@api.gitlife.ru:oschina-mirror/tomsun28-usthe.git
oschina-mirror
tomsun28-usthe
tomsun28-usthe
master