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

OSCHINA-MIRROR/pcore-just-auth-spring-security-starter

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

Spring security интеграция JustAuth для реализации сторонней авторизации:

justAuthSpringSecurity JDK Maven MySQL Redis SpringBoot SpringSecurity JustAuth license

1. Особенности

Spring security интегрирует JustAuth для обеспечения сторонней аутентификации: этот проект был выделен из проекта каркаса управления пользователями (UMS): https://github.com/ZeroOrInfinity/UMS | https://gitee .com/pcore/UMS).

  1. Поддерживает все сторонние методы входа, поддерживаемые JustAuth, с автоматической регистрацией или привязкой или созданием временных пользователей (TemporaryUser).
  2. Поддерживает периодическое обновление accessToken с помощью распределённой задачи таймера.
  3. Поддерживает функции кэширования Redis для пользовательской информации и токенов сторонних методов входа.
  4. Поддерживает интерфейсы привязки, отмены привязки и запроса для сторонних методов входа.
  5. Поддерживает функцию единого входа.

Диаграмма процесса входа

Диаграмма процесса входа

Группа WeChat: UMS добавить WeChat (z56133) примечание (UMS)

weixin


2. Maven:

<dependency>
    <groupId>top.dcenter</groupId>
    <artifactId>justAuth-spring-security-starter</artifactId>
    <version>latest</version>
</dependency>

3. Использование

1. Импорт зависимостей

<dependency>
    <groupId>top.dcenter</groupId>
    <artifactId>justAuth-spring-security-starter</artifactId>
    <version>latest</version>
</dependency>

2. Необходимые интерфейсы

3. Необходимо добавить Auth2AutoConfigurer в HttpSecurity

@Configuration
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {

    @Autowired
    private Auth2AutoConfigurer auth2AutoConfigurer;
    @Autowired
    private Auth2Properties auth2Properties;

    @Override
    protected void configure(HttpSecurity http) throws Exception {

        // ========= start: использование justAuth-spring-security-стартера обязательно ========= 
        // Добавление Auth2AutoConfigurer для включения OAuth2 (justAuth) login.
        http.apply(this.auth2AutoConfigurer);

        http.csrf().disable();

        // Разрешение доступа к точкам входа и обратного вызова для сторонних методов входа
        // @formatter:off
        http.authorizeRequests()
                .antMatchers(HttpMethod.GET,
                             auth2Properties.getRedirectUrlPrefix() + "/*",
                             auth2Properties.getAuthLoginUrlPrefix() + "/*")
                .permitAll();
        // @formatter:on
        // ========= end: использование justAuth-spring-security-стартера обязательно =========

    }
}

4. Свойства конфигурации

  • Большинство функций justAuth-spring-security-стартера реализуются через настройку свойств. Подробные настройки свойств см. в разделе «Список свойств конфигурации».

4. Интерфейсы

  • UmsUserDetailsService: необходимо реализовать

  • Auth2StateCoder: пользователь должен реализовать, если необходимо настроить кодирование и декодирование состояния в процессе стороннего входа. Можно передать необходимую информацию, например, целевой URL после успешного входа третьей стороны. Обратите внимание, что два метода этого интерфейса должны быть реализованы одновременно. После реализации интерфейса его можно внедрить в контейнер IOC. Если есть интерфейс переднего плана для получения authorizeUrl, который передаёт дополнительные параметры на задний план, и используется для регистрации, он должен быть реализован вместе с методом UmsUserDetailsService.registerUser(AuthUser, String, String, String).

  • Auth2UserService: интерфейс для получения информации о пользователе третьей стороны. Обычно не требует реализации пользователем, за исключением случаев, когда требуется настроить получение информации о пользователе третьей стороны. Реализуйте этот интерфейс и внедрите его в контейнер IOC, чтобы заменить его. ConnectionService (https://gitee.com/pcore/just-auth-spring-security-starter/blob/master/src/main/java/top/dcenter/ums/security/core/oauth/signup/ConnectionService.java):

Интерфейс для регистрации, привязки, обновления информации о пользователях и accessToken третьих сторон при авторизации. Обычно не требует реализации со стороны пользователя.

Исключение составляют случаи, когда необходимо настроить логику получения информации о пользователе третьей стороны. В таких случаях достаточно реализовать интерфейс и внедрить его в IOC контейнер.

UsersConnectionRepository (https://gitee.com/pcore/just-auth-spring-security-starter/blob/master/src/main/java/top/dcenter/ums/security/core/oauth/repository/UsersConnectionRepository.java):

Интерфейс для операций добавления, изменения и удаления информации о пользователях третьих сторон, а также для привязки и отвязки пользователей. Обычно не требует реализации со стороны пользователя.

Исключения составляют случаи, когда необходима настройка логики получения информации о пользователе третьей стороны. Тогда достаточно реализовать интерфейс и внедрить его в IOC контейнер.

UsersConnectionTokenRepository (https://gitee.com/pcore/just-auth-spring-security-starter/blob/master/src/main/java/top/dcenter/ums/security/core/oauth/repository/UsersConnectionTokenRepository.java):

Интерфейс для работы с информацией о токенах доступа пользователей третьих сторон. Обычно не требует реализации со стороны пользователя.

Исключением являются случаи, когда требуется настроить логику получения информации о пользователе третьей стороны. Для этого достаточно реализовать интерфейс и внедрить его в IOC контейнер.

Отмена встроенной базы данных OAuth2

Для отмены встроенной базы данных необходимо выполнить следующие шаги:

  1. Отключить поддержку встроенных таблиц user_connection и auth_token, установив значение свойства enable-user-connection-and-auth-token-table равным false.

  2. Если поддержка таблицы auth_token отключена, необходимо реализовать интерфейс ConnectionService.

Расширение интерфейса OAuth2 Login

В системе предусмотрены два пользовательских провайдера: ums.oauth.customize и ums.oauth.gitlabPrivate.

OneClickLoginService

При активации функции однократного входа необходимо реализовать этот интерфейс. Он позволяет получить номер телефона пользователя на основе токена доступа от поставщика услуг.

Сериализация и десериализация с использованием Jackson

Чтобы решить проблему с невозможностью десериализации некоторых типов данных из Redis, добавлены некоторые десериализаторы для Authentication и UserDetails.

Конкретные настройки десериализатора Redis можно найти в методе RedisCacheAutoConfiguration.getJackson2JsonRedisSerializer().

Обратите внимание, что класс UmsUserDetailsService уже имеет реализацию десериализатора для своего метода регистрации пользователей. Однако если вы создаёте собственный подкласс, вам придётся самостоятельно реализовать десериализатор.

Быстрый старт

Добавление зависимостей

Необходимо добавить зависимости в проект. Класс UserDetailsServiceImpl реализует сервис UmsUserDetailsService:

  1. Используется для логики сторонних логинов, а также паролей и SMS-логинов.
  2. Реализует логику парольного входа пользователя.
  3. Реализует регистрацию пользователей.

@author YongWu zheng @version V1.0 Created by 2020/9/20 11:06

import org.springframework.security.crypto.password.PasswordEncoder;
import top.dcenter.ums.security.core.oauth.enums.ErrorCodeEnum;
import top.dcenter.ums.security.core.oauth.exception.RegisterUserFailureException;
import top.dcenter.ums.security.core.oauth.exception.UserNotExistException;
import top.dcenter.ums.security.core.oauth.service.UmsUserDetailsService;

import java.util.List;

/**
 *  Сервис регистрации и авторизации пользователей с помощью пароля и SMS:
 *  1. Для сторонних логинов и парольных логинов.
 *  2. Для парольного входа.
 *  3. Регистрация пользователей.
 */
@Service
public class UserDetailsServiceImpl implements UmsUserDetailsService {
    
    private final Logger log = LoggerFactory.getLogger(this.getClass());

    @SuppressWarnings("SpringJavaAutowiredFieldsWarningInspection")
    @Autowired(required = false)
    private UserCache userCache;
    /**
     * Для шифрования и дешифрования паролей.
     */
    @SuppressWarnings("SpringJavaAutowiredFieldsWarningInspection")
    @Autowired
    private PasswordEncoder passwordEncoder;

    @Override
    public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
        try {
            // Извлекаем информацию о пользователе из кэша:
            if (this.userCache != null) {
                UserDetails userDetails = this.userCache.getUserFromCache(username);
                if (userDetails != null) {
                    return userDetails;
                }
            }
            // Получаем информацию о пользователе:

            // Логика получения информации о пользователе...
            // ...

            log.info("Demo ======>: Логин пользователя: {}, успешная авторизация", username);
            return new User(username,
                            passwordEncoder.encode("admin"),
                            true,
                            true,
                            true,
                            true,
                            AuthorityUtils.commaSeparatedStringToAuthorityList("ROLE_VISIT, ROLE_USER"));

        } catch (Exception e) {
            String msg = String.format("Demo ======>: Логин пользователя: %s, ошибка авторизации: %s", username, e.getMessage());
            log.error(msg);
            throw new UserNotExistException(ErrorCodeEnum.QUERY_USER_INFO_ERROR, e, username);
        }
    }

   @Override
    public UserDetails registerUser(AuthUser authUser, String username, String defaultAuthority, String decodeState) throws RegisterUserFailureException {

        // Для сторонних логинов пароль не требуется, здесь он устанавливается произвольно для генерации среды в соответствии с собственной логикой.
        String encodedPassword = passwordEncoder.encode(authUser.getUuid());

        final RequestAttributes requestAttributes = RequestContextHolder.getRequestAttributes();
        requestAttributes.setAttribute("redirectUrl", decodeState, RequestAttributes.SCOPE_REQUEST);

        List<GrantedAuthority> grantedAuthorities = AuthorityUtils.commaSeparatedStringToAuthorityList(defaultAuthority);

        log.info("Demo ======>: Имя пользователя: {}, регистрация прошла успешно", username);

        UserDetails user = User.builder()
                               .username(username)
                               .password(encodedPassword)
                               .disabled(false)
                               .accountExpired(false)
                               .accountLocked(false)
                               .credentialsExpired(false)
                               .authorities(grantedAuthorities)
                               .build();

        if (userCache != null) {

}}
``` ### 4. Страницы фронтенда:

#### login.html: разместить в classpath:/static

```html
<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>Вход</title>
</head>
<body>
<h2>Страница входа</h2>
<h3>Социальный вход</h3>
<a href="/demo/auth2/authorization/gitee">Вход через gitee</a>
<a href="/demo/auth2/authorization/github">Вход через github</a>
<a href="/demo/auth2/authorization/qq">Вход через qq</a>
</body>
</html>

index.html: разместить в classpath:/static

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>Индекс</title>
</head>
<body>
hello world!<br>
    <form action="/demo/logout?logout" method="post">
        <input type="submit" value="Выход post"/>
    </form>

<br>
<br>
<a href="/demo/auth2/authorization/gitee">Войти через gitee</a>
<a href="/demo/auth2/authorization/github">Войти через github</a>
<a href="/demo/auth2/authorization/qq">Войти через qq</a>
</body>
</html>

5. Доступ к страницам фронтенда

  • Откройте браузер и перейдите по адресу http://localhost:9090/demo/login.html. Это интегрирует сторонний вход (justAuth-spring-security-starter) и обеспечивает быструю разработку.
  • Подробная конфигурация доступна по ссылке: justAuth-security-oauth2-example.

7. Временная диаграмма: изменения с течением времени

Сторонний авторизационный вход


8. Список свойств конфигурации

OAuth2 / refreshToken периодическая задача / JustAuth свойства конфигурации

Свойство Тип Значение по умолчанию Описание Опции
ums.oauth.autoSignUp Boolean true Поддерживает ли автоматический вход после стороннего входа, если пользователь не зарегистрирован. По умолчанию: true true/false
ums.oauth.signUpUrl String /signUp.html Если пользователь не зарегистрирован и не поддерживает автоматический вход, то перенаправляет на этот URL для регистрации. Этот URL должен быть реализован разработчиком; по умолчанию: /signUp.html; например: 1. Установите значение "/signUp", чтобы перейти к "/signUp" для регистрации. 2. Если вы хотите вернуть пользовательские данные JSON во внешний интерфейс, здесь необходимо установить null, а затем обработать возврат JSON в AuthenticationSuccessHandler на Auth2LoginAuthenticationFilter. Судить, является ли это временным пользователем, можно по Authentication.getPrincipal(), является ли он типом TemporaryUser.
ums.oauth.temporaryUserPassword String "" Используется при входе через сторонние сервисы, когда автоматический вход отключен и пользователь впервые входит в систему как временный пользователь. Пароль по умолчанию пуст. Обратите внимание: замените пароль в производственной среде.
ums.oauth.temporaryUserAuthorities String "ROLE_TEMPORARY_USER" Используется при входе через сторонние сервисы, когда автоматический вход отключён и пользователь впервые вошёл в систему как временный пользователь, полномочия по умолчанию. Несколько полномочий разделяются запятыми. По умолчанию — "ROLE_TEMPORARY_USER".
ums.oauth.domain String http://127.0.0.1 Домен обратного вызова стороннего входа. Например: https://localhost. По умолчанию «http://127.0.0.1». redirectUrl формируется напрямую из {domain}/{servletContextPath}/{redirectUrlPrefix}/{providerId}(ums.oauth.[qq/gitee/weibo]).
ums.oauth.redirectUrlPrefix String /oauth/login Префикс URL обработки обратного вызова входа через сторонние сервисы. Не включает ServletContextPath, по умолчанию /oauth/login.
ums.oauth.authLoginUrlPrefix String /oauth/authorization Префикс URL авторизации входа через сторонние сервисы. Не включает ServletContextPath, по умолчанию /oauth/authorization.
ums.oauth.temporaryUserAuthorities String ROLE_USER Полномочия по умолчанию после успешного входа через сторонние сервисы. Несколько полномочий разделены запятыми, по умолчанию — «ROLE_USER».
ums.oauth.suppressReflectWarning Boolean false Подавляет предупреждения о рефлексии. Поддерживает JDK11, по умолчанию false. После подтверждения WARNING: An illegal reflective access operation has occurred можно включить эту настройку, чтобы подавить предупреждения о рефлексии. true/false
ums.oauth.enableUserConnectionAndAuthTokenTable Boolean true Поддержка встроенной таблицы пользователей (user_connection) и токенов аутентификации для сторонних сервисов.
------------------------------------------------------------- ---------------------- -------------------- --------------------------------------------------------------------
auth_token true Если false, необходимо реализовать интерфейс ConnectionService.
ums.oauth.enableAuthTokenTable Boolean true Поддержка встроенной таблицы сторонних токенов auth_token.
refreshToken периодическая задача
ums.oauth.refreshTokenJobCron String 0 * 2 * * ? Выражение cron-типа. 0 * 2 * *? соответствует: second/minute/hour/day of month/month/day of week.
По умолчанию: «0 * 2 * *?», запуск задачи в 2 часа ночи, поддерживается распределённое выполнение (в IOC контейнере должен быть RedisConnectionFactory).
ums.oauth.enableRefreshTokenJob Boolean false Поддержка периодического обновления AccessToken, так как многие приложения имеют собственные периодические задачи, по умолчанию false. Интерфейс RefreshTokenJob уже внедрён в IOC контейнер для удобства вызова при реализации пользовательских интерфейсов периодических задач. Поддерживается распределённое выполнение.
В IOC контейнере также должен быть RedisConnectionFactory.
ums.oauth.batchCount Integer 1000 Количество записей базы данных, обрабатываемых при периодическом обновлении accessToken. При распределённом приложении эта конфигурация должна быть одинаковой на разных серверах. Размер batchCount следует оптимизировать в соответствии с реальной производственной средой.
ums.oauth.remainingExpireIn Integer 24 Срок действия accessToken до его обновления. По умолчанию 24 часа.
justAuth
ums.oauth.justAuth.ignoreCheckState Boolean false Игнорировать проверку состояния, по умолчанию не включено. Когда ignoreCheckState имеет значение true, me.zhyd.oauth.request.AuthDefaultRequest.login(AuthCallback) не будет проверять законность состояния.
Используется, когда реализована собственная логика проверки состояния.
ums.oauth.justAuth.timeout Duration PT180S Время ожидания по умолчанию для кэша состояния: 3 минуты (PT180S). Учитывая время, затрачиваемое на процесс авторизации, которое может варьироваться в зависимости от индивидуальных привычек пользователя или платформы авторизации (например, Google), и то, что каждый процесс авторизации обычно не занимает слишком много времени, этот кэш по умолчанию настроен на истечение срока действия через 3 минуты. Программа предполагает, что авторизация действительна в течение 3 минут, а после истечения этого времени считается недействительной и удаляется.
ums.oauth.justAuth.cacheType StateCacheType SESSION Тип кэширования состояния justAuth, по умолчанию session.
ums.oauth.justAuth.cacheKeyPrefix String JUST_AUTH: Префикс ключа кэша justAuth state.
proxy
ums.oauth.proxy.enable Boolean false Поддерживать ли прокси, по умолчанию false. Если false, другие атрибуты не действуют.
ums.oauth.proxy.proxy Proxy.Type HTTP Для зарубежных сервисов можно отдельно настроить тип прокси, по умолчанию Proxy.Type.HTTP.
ums.oauth.proxy.hostname String Хост прокси, действует при enable = true.
ums.oauth.proxy.port Integer Порт прокси, действует при enable = true.
ums.oauth.proxy.timeout Duration PT3S Тайм-аут прокси, по умолчанию PT3S.
ums.oauth.proxy.foreignTimeout Duration PT15S Иностранный тайм-аут. Используется для прокси-сервера зарубежных сайтов, по умолчанию PT15S
github
ums.oauth.github.clientId Строка client Id
ums.oauth.github.clientSecret Строка client Secret
ums.oauth.github.scopes Список<Строка> Поддерживает настраиваемое содержимое области действия для платформ авторизации, формат см. в подклассах соответствующего AuthScope.getScope(). Обратите внимание: автоматически добавляются настройки области действия по умолчанию.
weibo
ums.oauth.weibo.clientId Строка client Id
ums.oauth.weibo.clientSecret Строка client Secret
ums.oauth.weibo.scopes Список<Строка> Поддерживает настраиваемое содержимое области действия для платформ авторизации, формат см. в подклассах соответствующего AuthScope.getScope(). Обратите внимание: автоматически добавляются настройки области действия по умолчанию.
gitee
ums.oauth.gitee.clientId Строка client Id
ums.oauth.gitee.clientSecret Строка client Secret
ums.oauth.gitee.scopes Список<Строка> Поддерживает настраиваемое содержимое области действия для платформ авторизации, формат см. в подклассах соответствующего AuthScope.getScope(). Обратите внимание: автоматически добавляются настройки области действия по умолчанию.
dingtalk
ums.oauth.dingtalk.clientId Строка client Id
ums.oauth.dingtalk.clientSecret Строка client Secret
baidu
ums.oauth.baidu.clientId Строка client Id
ums.oauth.baidu.clientSecret Строка client Secret
ums.oauth.baidu.scopes Список<Строка> Поддерживает настраиваемое содержимое области действия для платформ авторизации, формат см. в подклассах соответствующего AuthScope.getScope(). Обратите внимание: автоматически добавляются настройки области действия по умолчанию.
coding
------------------------------------------------------------------------
ums.oauth.coding.clientId Строка client Id
ums.oauth.coding.clientSecret Строка client Secret
ums.oauth.coding.codingGroupName Строка Использование Coding для входа требует передачи этого значения.
Префикс домена команды, например, «https://justauth.coding.net/»: codingGroupName = justauth
ums.oauth.coding.scopes List<Строка> Поддерживает настраиваемое содержимое области действия для платформы авторизации, формат см. в соответствующем подклассе AuthScope.getScope(). Обратите внимание: автоматически добавляются настройки области по умолчанию.
oschina
ums.oauth.oschina.clientId Строка client Id
ums.oauth.oschina.clientSecret Строка client Secret
alipay
ums.oauth.alipay.clientId Строка client Id
ums.oauth.alipay.clientSecret Строка client Secret
ums.oauth.alipay.alipayPublicKey Строка Открытый ключ Alipay: когда выбран вход через Alipay, это значение можно использовать с «открытым ключом RSA2 (SHA256)» в значении «открытый ключ Alipay».
ums.oauth.alipay.proxyHost Строка Alipay: у Alipay есть собственный прокси-сервер, по умолчанию прокси-сервер не действует для Alipay, хост прокси:
ums.oauth.alipay.proxyPort Целое число Alipay: у Alipay есть собственный прокси-сервер, по умолчанию прокси-сервер не действует для Alipay, порт прокси:
qq
ums.oauth.qq.clientId Строка client Id
ums.oauth.qq.clientSecret Строка client Secret
ums.oauth.qq.unionId Строка Требуется ли заявка на unionId, по умолчанию: false. В настоящее время применяется только к qq login. Примечание: при авторизации qq получение unionId требует отдельной отправки запроса на разрешение. Если личный аккаунт разработчика имеет эту привилегию, можно установить значение true, и при получении openId будет синхронизироваться получение unionId. Ссылка для справки: http://wiki.connect.qq.com/unionid%E4%BB%8B%E7%BB%8D
ums.oauth.qq.scopes List<Строка> Поддержка настраиваемого содержимого области действия для платформы авторизации, формат см. в соответствующем подклассе AuthScope.getScope(). Обратите внимание: автоматически добавляются настройки области по умолчанию.
wechatOpen
ums.oauth.wechatOpen.clientId Строка client Id
ums.oauth.wechatOpen.clientSecret Строка client Secret
--------------------------------------------------------- -------------- ----------------------------------------------------------- ------------------------------------------------------------ --------------
wechatMp
ums.oauth.wechatMp.clientId Строка client Id
ums.oauth.wechatMp.clientSecret Строка client Secret
ums.oauth.wechatMp.scopes List<Строка> Поддерживает настраиваемое содержимое области действия для платформы авторизации, формат см. в подклассе соответствующего AuthScope.getScope(). Обратите внимание: автоматически добавляются настройки области действия по умолчанию.
taobao
ums.oauth.taobao.clientId Строка client Id
ums.oauth.taobao.clientSecret Строка client Secret
ums.oauth.taobao.scopes List<Строка> Поддерживает настраиваемое содержимое области действия для платформы авторизации, формат см. в подклассе соответствующего AuthScope.getScope(). Обратите внимание: автоматически добавляются настройки области действия по умолчанию.
google
ums.oauth.google.clientId Строка client Id
ums.oauth.google.clientSecret Строка client Secret
ums.oauth.google.scopes List<Строка> Поддерживает настраиваемое содержимое области действия для платформы авторизации, формат см. в подклассе соответствующего AuthScope.getScope(). Обратите внимание: автоматически добавляются настройки области действия по умолчанию.
facebook
ums.oauth.facebook.clientId Строка client Id
ums.oauth.facebook.clientSecret Строка client Secret
ums.oauth.facebook.scopes List<Строка> Поддерживает настраиваемое содержимое области действия для платформы авторизации, формат см. в подклассе соответствующего AuthScope.getScope(). Обратите внимание: автоматически добавляются настройки области действия по умолчанию.
github
ums.oauth.github.clientId Строка client Id
ums.oauth.github.clientSecret Строка client Secret
ums.oauth.github.scopes List<Строка>
---------------------------------------------------------------------- ---------------------------------- -------------------------- --------------------------------------------------------------------------- ------------------------------
ums.oauth.teambition.clientSecret Строка client Secret
renren
ums.oauth.renren.clientId Строка client Id
ums.oauth.renren.clientSecret Строка client Secret
ums.oauth.renren.scopes Список<Строка> Поддерживает настраиваемое содержимое scope для платформы авторизации, формат
см. в подклассе AuthScope.getScope(). Обратите внимание: автоматически добавляются
настройки по умолчанию.
pinterest
ums.oauth.pinterest.clientId Строка client Id
ums.oauth.pinterest.clientSecret Строка client Secret
ums.oauth.pinterest.scopes Список<Строка> Поддерживает настраиваемое содержимое scope для платформы авторизации, формат
см. в подклассе AuthScope.getScope(). Обратите внимание: автоматически добавляются
настройки по умолчанию.
stackOverflow
ums.oauth.stackOverflow.clientId Строка client Id
ums.oauth.stackOverflow.clientSecret Строка client Secret
ums.oauth.stackOverflow.stackOverflowKey Строка Stack Overflow Key
ums.oauth.stackOverflow.scopes Список<Строка> Поддерживает настраиваемое содержимое scope для платформы авторизации, формат
см. в подклассе AuthScope.getScope(). Обратите внимание: автоматически добавляются
настройки по умолчанию.
huawei
ums.oauth.huawei.clientId Строка client Id
ums.oauth.huawei.clientSecret Строка client Secret
ums.oauth.huawei.scopes Список<Строка> Поддерживает настраиваемое содержимое scope для платформы авторизации, формат
см. в подклассе AuthScope.getScope(). Обратите внимание: автоматически добавляются
настройки по умолчанию.
wechatEnterprise 企业微信二维码版
ums.oauth.wechatEnterprise.clientId Строка client Id
----------------------------------------------------------------- ------------------------------ ------------------------------------------ ------------------------------------------------------------ -----------------------------------------------------
accessTokenRefreshJob
ums.executor.accessTokenRefreshJob.corePoolSize Integer 0 Количество потоков, которые остаются незанятыми в пуле потоков. По умолчанию: 0
ums.executor.accessTokenRefreshJob.keepAliveTime Integer 10 Время поддержания активности потока. По умолчанию: 10
ums.executor.accessTokenRefreshJob.timeUnit TimeUnit TimeUnit.MILLISECONDS Единица времени для keepAliveTime. По умолчанию: миллисекунды MILLISECONDS/MICROSECONDS/MILLISECONDS/SECONDS/MINUTES/HOURS/DAYS
ums.executor.accessTokenRefreshJob.poolName String accessTokenJob Имя пула потоков. По умолчанию: accessTokenJob
ums.executor.accessTokenRefreshJob.rejectedExecutionHandlerPolicy RejectedExecutionHandlerPolicy ABORT Политика отказа. По умолчанию: ABORT ABORT/CALLER_RUNS/DISCARD_OLDEST/DISCARD
ums.executor.accessTokenRefreshJob.executorShutdownTimeout Duration PT10S Время ожидания при завершении работы пула потоков. По умолчанию: PT10S
refreshToken

Примечание: в ответе переведён только текст без кода. | 线程池名称, по умолчанию: updateConnection | | | ----------------------------------------------------------------------- | ------------------------------------------------------------ | | ums.executor.updateConnection.rejectedExecutionHandlerPolicy | RejectedExecutionHandlerPolicy | CALLER_RUNS | Стратегия отказа, по умолчанию: CALLER_RUNS. Обратите внимание: обычно не рекомендуется изменять настройки по умолчанию, если только вы не реализуете собственную логику обновления Auth2LoginAuthenticationProvider; также поддерживается ABORT, по умолчанию реализация Auth2LoginAuthenticationProvider является асинхронным обновлением, которое будет выполнено после отказа в выполнении, оно будет выполняться синхронно. | ABORT/CALLER_RUNS/DISCARD_OLDEST/DISCARD | | ums.executor.updateConnection.executorShutdownTimeout | Duration | PT10S | Время ожидания завершения работы пула потоков, по умолчанию: PT10S | |


Настройка сохранения данных о сторонних авторизованных пользователях и их токенах в базе данных (jdbc) с использованием кэширования Redis

Свойство Тип Значение по умолчанию Описание Возможные значения
ums.cache.redis.open Boolean false Redis cache открыт, значение по умолчанию — false true/false
ums.cache.redis.useIocRedisConnectionFactory Boolean false Следует ли использовать RedisConnectionFactory из контейнера Spring IOC, значение по умолчанию — false. Если используется RedisConnectionFactory из Spring IOC контейнера, необходимо обратить внимание на то, что cache.database-index должен совпадать со значением spring.redis.database true/false
Кэш
ums.cache.redis.cache.databaseIndex Integer 0 Индекс базы данных Redis, где хранится кэш, значение по умолчанию — 0
ums.cache.redis.cache.defaultExpireTime Duration PT200S Устанавливает время истечения срока действия по умолчанию для кэша, управляемого менеджером кэша, значение по умолчанию — 200 секунд
ums.cache.redis.cache.entryTtl Duration PT180S TTL кэша. Использование 0 означает создание постоянного кэша. Значение по умолчанию — 180 секунд. В качестве динамического случайного отклонения от 20% до верхнего и нижнего предела времени кэширования используется значение времени кэширования. Это предотвращает одновременное истечение срока действия кэша и «пробой» кэша
ums.cache.redis.cache.cacheNames Set Имена кэшей по умолчанию, которые следует учитывать при операциях кэширования, определённых в аннотированном классе

Конфигурация таблицы user_connection sql для информации о сторонних авторизованных пользователях

Свойство Тип Значение по умолчанию Описание Возможные значения
Операторы инициализации базы данных
ums.repository.enableStartUpInitializeTable Boolean true Следует ли проверять и автоматически создавать userConnectionTableName и authTokenTableName при запуске, значение по умолчанию TRUE true/false
ums.repository.queryDatabaseNameSql String select database(); Запрос имени базы данных, значение по умолчанию — mysql.
ums.repository.authTokenTableName String auth_token Имя таблицы базы данных для AuthTokenPo для третьей стороны, которая входит в систему
ums.repository.queryAuthTokenTableExistSql String SELECT COUNT(1) FROM information_schema.tables WHERE table_name = '%s' AND table_schema = '%s'; Запрос наличия authTokenTableName в базе данных. Обратите внимание, что %s в операторе SQL должен быть заполнен, а порядок %s должен соответствовать значению поля, соответствующему имени таблицы authTokenTableName, и имени базы данных
ums.repository.createAuthTokenTableSql String Создание оператора создания таблицы для authTokenTableName. Обратите внимание, что sql оператор должен содержать %s, а порядок %s должен соответствовать полю, соответствующему authTokenTableName, database Создание оператора создания таблицы для authTokenTableName. Обратите внимание, что sql оператор должен содержать %s, а порядок %s должен соответствовать полю, соответствующему authTokenTableName, database Запрос 1

%s | Запрос к таблице пользователей базы данных сторонних логинов. Обратите внимание: в запросе необходимо заполнить %s, знаки вопроса должны соответствовать указанным %s, а %s будут последовательно заменены на : databaseName, tableName | | ums.repository.findUserIdsWithConnectionSql | String | select %s from %s where %s = ? and %s = ? | Запрос к таблице пользователей базы данных сторонних логинов для получения идентификаторов пользователей (userIds). Обратите внимание: в запросе необходимо заполнить %s, знаки вопроса должны соответствовать указанным %s, а %s будут последовательно заменены на: userIdColumnName, tableName, providerIdColumnName, providerUserIdColumnName |

Запрос 2

| ums.repository.findUserIdsConnectedToSql | String | select %s from %S where %s = :%s and %s in (:%s) | Запрос через стороннего поставщика услуг для получения userIds из таблицы пользователей по providerId и providerUserIds. Обратите внимание: в запросе необходимо заполнить %s, знаки вопроса должны соответствовать указанным %s, а %s будут последовательно заменены на: userIdColumnName, tableName, providerIdColumnName, providerUserIdColumnName |

Запрос 3

| ums.repository.selectFromUserConnectionSql | String | select %s, %s, %s, %s, %s, %s, %s, %s, %s, %s from %s | Запрос через стороннего поставщика услуг для получения информации о пользователях по providerId и providerUserIds из таблицы пользователей. Обратите внимание: в запросе необходимо заполнить %s, знаки вопроса должны соответствовать указанным %s, а %s будут последовательно заменены на: userIdColumnName, providerIdColumnName, providerUserIdColumnName, displayNameColumnName, profileUrlColumnName, imageUrlColumnName, accessTokenColumnName, tokenIdColumnName, refreshTokenColumnName, expireTimeColumnName, tableName |

Запрос 4

| ums.repository.updateConnectionSql | String | update %s set %s = ?, %s = ?, %s = ?, %s = ?, %s = ?, %s = ?, %s = ? where %s = ? and %s = ? and %s = ? | Запрос на обновление таблицы пользователей сторонних логинов. Обратите внимание: в запросе необходимо заполнить %s, знаки вопроса должны соответствовать указанным %s, а %s будут последовательно заменены на: tableName, displayNameColumnName, profileUrlColumnName, imageUrlColumnName, accessTokenColumnName, tokenIdColumnName, refreshTokenColumnName, expireTimeColumnName, userIdColumnName, providerIdColumnName, providerUserIdColumnName |

Запрос 5

| ums.repository.addConnectionSql | String | insert into %s(%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s) values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) | Запрос на добавление пользователя в таблицу пользователей сторонних логинов. Обратите внимание: в запросе необходимо заполнить %s, знаки вопроса должны соответствовать указанным %s, а %s будут последовательно заменены на: tableName, userIdColumnName, providerIdColumnName, providerUserIdColumnName, rankColumnName, displayNameColumnName, profileUrlColumnName, imageUrlColumnName, accessTokenColumnName, tokenIdColumnName, refreshTokenColumnName, expireTimeColumnName |

Запрос 6

| ums.repository.addConnectionQueryForRankSql | String | select coalesce(max(%s) + 1, 1) as %s from %s where %s = ? and %s = ? | Запрос для определения необходимого значения ранга при добавлении пользователя в таблицу пользователей. Обратите внимание: в запросе необходимо заполнить %s, знаки вопроса должны соответствовать указанным %s, а %s будут последовательно заменены на: rankColumnName, rankColumnName, tableName, userIdColumnName, providerIdColumnName |

Запрос 7

| ums.repository.removeConnectionsSql | String | delete from %s where %s = ? and %s = ? | Запрос на удаление нескольких пользователей из таблицы пользователей на основе userId и providerId. Обратите внимание: в запросе необходимо заполнить %s, знаки вопроса должны соответствовать указанным %s, а %s будут последовательно заменены на: tableName, userIdColumnName, providerIdColumnName |

Запрос 8

| ums.repository.removeConnectionSql | String | delete from %s where %s = ? and %s = ? and %s = ? | Запрос на удаление одного пользователя из таблицы пользователей на основе userId, providerId, providerUserId. Обратите внимание: в запросе необходимо заполнить %s, знаки вопроса должны соответствовать указанным %s, а %s будут последовательно заменены на: tableName, userIdColumnName, providerIdColumnName, providerUserIdColumnName |

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

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

Введение

Описание недоступно Развернуть Свернуть
MIT
Отмена

Обновления

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

Участники

все

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

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