kisso = cookie sso
kisso — это швейцарский армейский нож для быстрой разработки Java Web-систем единого входа (SSO) на основе Cookie.
Другие открытые проекты:
Разделение на фронтэнд и бэкэнд: доступны два варианта:
Для связи есть группа в WeChat: wx153666.
Репозиторий: https://search.maven.org/search?q=g:com.baomidou.
<groupId>com.baomidou</groupId>
<artifactId>kisso</artifactId>
<version>3.9.3</version>
</dependency>```
Обратите внимание, что spring boot 2.x использует версию 3.9.0 и ниже.
**Демо-версии для тестирования:**
* kisso-spring-boot;
* kisso_springmvc;
* kisso_jfinal;
* kisso_crossdomain;
* kisso-oauth2-demo.
**Документация по использованию:**
Создание JWT-токена:
```String jwtToken = SSOToken.create().setId(1).setIssuer("admin").setOrigin(TokenOrigin.HTML5).getToken();```
Анализ токена:
```SSOToken ssoToken = SSOToken.parser(jwtToken);```
Установка Cookie:
```SSOHelper.setCookie(request, response, new SSOToken().setId(String.valueOf(1)).setIssuer("admin"));```
Если вы хотите одновременно поддерживать Cookie и заголовок, настройте следующим образом:
```ssoToken.setOrigin(TokenOrigin.HTML5);```
**Spring Boot:**
```@ControllerAdvice
@Configuration
public class WebConfig implements WebMvcConfigurer {
@Override
public void addInterceptors(InterceptorRegistry registry) {
// SSO 授权拦截器
SSOSpringInterceptor ssoInterceptor = new SSOSpringInterceptor();
ssoInterceptor.setHandlerInterceptor(new LoginHandlerInterceptor());
registry.addInterceptor(ssoInterceptor).addPathPatterns("/**").excludePathPatterns("/v1/sso/**");
}
}```
По умолчанию используется алгоритм HS512:
```// HS512 密钥,配置参数 kisso.config.sign-key
SSOHelper.getHS512SecretKey()```
Чтобы переключиться на алгоритм RS512, выполните следующие шаги:
1. Настройте алгоритм в файле конфигурации: ```kisso.config.sign-algorithm = RS512```.
2. Настройте приватный и публичный ключи сертификата. По умолчанию они находятся в каталоге resources.
Генерация RSA-ключа:
```$ keytool -genkeypair -alias jwtkey -keyalg RSA -dname "CN=llt" -keypass keypassword -keystore key.jks -storepass jkspassword```
Генерация публичного сертификата:
```$ keytool -export -alias jwtkey -file public.cert -keystore key.jks -storepass jkspassword```
Генерация публичного сертификата в формате .cer:
```$ keytool -exportcert -alias jwtkey -file public.cer -keystore key.jks -storepass jkspassword```
Генерация публичного сертификата в формате .pem:
```keytool -export -rfc -keystore key.jks --alias jwtkey -file public.pem -storepass jkspassword```
**Общие стратегии безопасности:**
Secure:
Cookie с пометкой Secure должны отправляться на сервер только через HTTPS. Это помогает защитить Cookie от перехвата и изменения при передаче между браузером и веб-сервером.
HTTPOnly:
Настройка HTTPOnly позволяет предотвратить доступ к Cookie через клиентские скрипты, такие как document.cookie. Это помогает защититься от XSS-атак.
SameSite:
Свойство SameSite позволяет запретить отправку Cookie при межсайтовых запросах. Это может помочь предотвратить CSRF-атаки.
Возможные значения свойства SameSite:
* Strict — разрешает отправку Cookie только для запросов с того же сайта.
* Lax — разрешает отправку Cookie для некоторых сторонних запросов.
* None — отправляет Cookie независимо от источника запроса.
В настоящее время проблемы с получением Cookie могут быть связаны с тем, что ранее значение по умолчанию было None, а после Chrome 80 оно стало Lax.
Безопасная конфигурация:
```kisso:
config:
# 开启 https 有效,传输更安全
cookie-secure: true
# 防止 XSS 防止脚本攻击
cookie-http-only: true
# 防止 CSRF 跨站攻击
cookie-same-site: Lax
# 加密算法 RSA
sign-algorithm: RS512
...```
**Поддержка actuator basic аутентификации:**
Необходимо внедрить следующую конфигурацию, при этом не раскрывая имена пользователей и пароли.
Spring Boot Web:
```@Bean
@ConditionalOnMissingBean
public FilterRegistrationBean basicAuthenticateFilter() {
FilterRegistrationBean registrationBean = new FilterRegistrationBean();
registrationBean.setFilter(new BasicAuthenticateFilter("用户名", "密码"));
registrationBean.addUrlPatterns("/actuator", "/actuator/**");
registrationBean.setOrder(Integer.MAX_VALUE);
return registrationBean;
}```
Spring Cloud Gateway Webflux:
```@Bean
public BasicAuthenticateWebfluxFilter BasicAuthenticateWebfluxFilter() {```
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.