Это зеркальный репозиторий, синхронизируется ежедневно с исходного репозитория.
Внести вклад в разработку кода
Синхронизировать код
README.md
DP-PASSPORT
Проект представляет собой
одноточечную систему входа на основе SpringBoot, которая предоставляет комплексное решение SSO (Single Sign-On), включающее в себя следующие особенности:
- Хранение информации о разрешении доступа на вход с использованием cookie, с дружественным уведомлением при отключении cookie.
- Поддержка входа для различных типов терминалов, включая веб и приложения, а также поддержка одноточечного входа для разных доменов верхнего уровня.
- Использование модели одноразового разрешения доступа (ticket) для повышения безопасности и предотвращения атак повторного воспроизведения.
- Применение шифрования с открытым и закрытым ключами для усиления защиты паролей.
- Гибкая настройка для различных типов терминалов и адаптация к различным сценариям разрешений доступа.
- Отсутствие необходимости вмешательства в бизнес-систему, достаточно добавить зависимость от паспорта и настроить параметры.
- Поддержка настройки различных стратегий доступа в соответствии с различными сценариями.
- Поддержка конфигурации анонимного доступа в стиле Ant.
- Возможность выхода из системы на стороне клиента, проверка состояния входа (поддержка междоменного доступа для веб-терминалов).
- Полные комментарии кода, многоуровневая структура и хорошая расширяемость, 100% прохождение проверки кода Alibaba Cloud, что облегчает последующую разработку.
Структура проекта
- dp-passport: агрегатный проект.
- dp-passport-common: базовый общий модуль.
- dp-passport-server: модуль аутентификации.
- dp-passport-client: клиентский модуль.
- dp-passport-admin: модуль управления бэкендом.
- dp-passport-samples: базовые примеры.
Система структуры
![image](https://images.gitee.com/uploads/images/2020/0104/002325_6c78c4f9_562480.png)
Метод подключения к одноточечному входу
- Зависимость Maven:
<dependency>
<groupId>net.chenlin</groupId>
<artifactId>dp-passport-client</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
- Конфигурация application.yml (см. описание параметров в разделе «Конфигурация клиента»).
ids:
client:
client-type: web
app-code: passportTest
auth-id-cookie-name: dpAuthId
server-name: http://samplesit.chenlintech.com:9090/sample
auth-server-url: http://passportsit.chenlintech.com:8080/ids
cookie-domain: chenlintech.com
- Конфигурация ids-access-policy.xml (настройка пути адреса анонимного доступа, возможность расширения других стратегий).
<?xml version="1.0" encoding="utf-8"?>
<access-policy>
<!-- 1. По умолчанию используется стратегия доступа: если текущий файл конфигурации не содержит URL, применяется стратегия по умолчанию.
ANON_ACCESS: доступ без предоставления информации для входа, request также не может получить информацию о пользователе.
AUTH_ACCESS: требуется вход перед доступом, request может получить информацию о пользователе.
ROUTER_ACCESS: маршрутизация доступа, request может получать информацию о пользователе во время входа в систему, и также может получать информацию о пользователе без входа, но в этом случае она будет пустой.
2. Приоритет стратегии: ANON_ACCESS > AUTH_ACCESS > ROUTER_ACCESS.
3. Адресное сопоставление: url-pattern поддерживает правила сопоставления адресов в стиле ant. -->
<default-access-policy>AUTH_ACCESS</default-access-policy>
<!-- Анонимный доступ: не проходит через обработку passport-filter, обычно это статические ресурсы, которые не требуют получения информации о запросе пользователя. -->
<anon-access>
<url-pattern>/**/*.css</url-pattern>
<url-pattern>/**/*.js</url-pattern>
<url-pattern>/**/*.jpg</url-pattern>
<url-pattern>/**/*.ico</url-pattern>
<url-pattern>/**/test/anonAccess</url-pattern>
</anon-access>
<!-- Доступ с авторизацией: необходимо войти в систему перед доступом. -->
<auth-access>
<url-pattern>/**/test/authAccess</url-pattern>
</auth-access>
<!-- Маршрутизация доступа: не требует принудительного входа пользователя для доступа, состояние входа запроса может получить информацию о пользователе, состояние без входа получает пустую информацию о пользователе. -->
<router-access>
<url-pattern>/**/test/routerAccess</url-pattern>
</router-access>
</access-policy>
Функции клиента
- Выход из системы:
— веб-терминал: [server-name]/logout, перенаправление на адрес выхода сервера.
— терминал приложения: [server-name]/logout, параметр [auth-id-cookie-name] содержится в header или param.
- Проверка статуса входа:
— веб-терминал: [server-name]/authStatus, возврат jsonp.
— терминал приложения: [server-name]/authStatus, параметр [auth-id-cookie-name] содержится в header или param.
Инструкция по использованию
- Среда разработки: JDK, Maven, MySQL, Redis, IDEA, JMeter.
- Изменить хост:
— 127.0.0.1 passportsit.chenlintech.com.
— 127.0.0.1 samplesit.chenlin.com.
- Скрипт базы данных находится в каталоге doc [dp-emp.sql], таблица пользователей является примером, который можно дополнительно разработать в соответствии с потребностями.
- Скрипт тестирования интерфейса находится в каталоге doc [паспорт входа в тест план.jmx].
- Пароль по умолчанию для пользователя паспорта: admin, пароль: 1.
Обратная связь
- Группа обмена QQ: [уже заполнена], номер DingTalk: 23119937.
- Если вы заинтересованы в проекте, пожалуйста, следите за ним и отмечайте его звёздочкой. В будущем будут периодически публиковаться обновления.
Конфигурация сервера
- auth-id-cookie-name: имя токена авторизации, имя cookie или имя токена, согласованное с сервером.
- welcome-page: страница приветствия, если после входа в систему redirect-адрес пуст, перейдите по этому адресу.
- cookie-domain: домен cookie, домен верхнего уровня.
- redis-host-and-port: адрес redis, формат 127.0.0.1:6379,127.0.0.1:6380,127.0.0.1:6381.
Конфигурация клиента
- client-type: тип клиента, настройка как web или app, по умолчанию — web.
- app-code: код доступа приложения, обязательный.
- auth-id-cookie-name: название токена авторизации, название cookie или название токена, согласуется с сервером.
- server-name: домашняя страница приложения, может быть не настроена для клиента приложения.
- auth-server-url: адрес сервера аутентификации, обязательный.
- cookie-domain: домен cookie для веб-клиента, домен верхнего уровня, клиент приложения может не настраиваться.
- Пример конфигурации доступа в стиле Ant см. в каталоге ресурсов dp-samples [ids-access-policy.xml].
SessionData: получение sessionData атрибута из запроса после входа в систему
- userId: идентификатор пользователя, получение уникального идентификатора пользователя.
- userAlias: логин пользователя.
- isLogin: статус входа: 1 — статус входа, 0 — статус без входа, зарезервированный атрибут принудительного выхода.
- userEnable: статус пользователя: 1 — нормальный, 0 — отключённый.
- rememberMe: запомнить меня, true сохраняет логин в течение 7 дней, false по умолчанию 30 минут.
- loginType: тип входа: 1 — веб-терминал, 2 — терминал приложения.
Определение кода ошибки
Код ошибки |
Сообщение об ошибке |
0000 |
Обработка прошла успешно |
1000 |
Бизнес-исключение |
9999 |
Системное исключение |
4000 |
Пользователь уже вошёл в систему |
4001 |
Пользователь не вошёл в систему |
4002 |
Имя пользователя не может быть пустым |
4003 |
Пароль не может быть пустым |
4004 |
Текущий пользователь не существует |
4005 |
Неправильный пароль |
4006 |
Аккаунт заблокирован |
4007 |
Вы были принудительно вышли из системы |
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.