Обзор
в предыдущей серии статейПроектирование и реализация аутентификации и управления разрешениями API в микросервисной архитектуреВ , у нас есть четыре статьи, объясняющие реализацию проверки подлинности и управления разрешениями API в микросервисах. Версия Spring Cloud, на которой он был основан в то время, былаDalston.SR4
, текущая последняя версия Spring Cloud:Finchley.SR1
, соответствующий Spring Boot также был обновлен до2.0.x
. Версия Spring CloudFinchley
По сравнению с предыдущей версией Spring Boot 2.0 произошли серьезные изменения, о конкретных изменениях можно узнать на официальном сайте. На этот раз проект будет обновлен до последней версии, а изменения будут подробно описаны ниже. С предыдущей версией, пожалуйста, переключитесь на1.0-RELEASE
.
обновить зависимости
Обновите зависимости Spring Boot до2.0.4.RELEASE
.
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.4.RELEASE</version>
</parent>
Обновите зависимость spring-cloud в dependencyManagement доFinchley.RELEASE
.
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>Finchley.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
Удалитьspring-cloud-starter-oauth2
зависеть, оставить толькоspring-cloud-starter-security
полагаться.
Обновление инструмента
flyway
В проекте мы ввели зависимость flyway для инициализации инкрементного скрипта базы данных.Подробности см.Приложение Flyway для управления версиями базы данных.
докер-контейнер
Чтобы упростить работу с этим проектом, автор предоставляет в проекте сценарий создания докеров. Если docker compose установлен локально, войдите в корневой каталог проекта для выполнения.docker-compose up
Заказ.
Мы можем запустить необходимые нам mysql и redis.
Mybatis и HikariCP
В версии Spring Boot 2.0.X HikariCP выбран в качестве пула соединений с базой данных по умолчанию. Поэтому нам не нужно дополнительно настраивать DataSource.
Конфигурации Mybatis mapper и config-location также представлены в виде конфигурационных файлов, поэтомуDatasourceConfig
сильно упростил.
application.yml
spring:
flyway:
baseline-on-migrate: true
locations: classpath:db
datasource:
hikari:
connection-test-query: SELECT 1
minimum-idle: 1
maximum-pool-size: 5
pool-name: dbcp1
driver-class-name: com.mysql.jdbc.Driver
url: jdbc:mysql://localhost:3306/auth?autoReconnect=true&useSSL=false
username: ${AUTH_DB_PWD:root}
password: ${AUTH_DB_USER:_123456_}
# schema[0]: classpath:/auth.sql
# initialization-mode: ALWAYS
type: com.zaxxer.hikari.HikariDataSource
redis:
database: 0
host: localhost
port: 6379
mybatis:
mapper-locations: classpath:/mybatis/mapper/*Mapper.xml
config-location: classpath:/mybatis/config.xml
Обновление класса конфигурации
AuthenticationManagerConfig
Устарело из-за циклических зависимостей, будетAuthenticationManager
Конфигурация размещена вWebSecurityConfig
середина.
WebSecurityConfig
добавлено изAuthenticationManagerConfig
изAuthenticationManager
конфигурация.
Поскольку Spring Security5 по умолчаниюPasswordEncoder
нетNoOpPasswordEncoder
, который необходимо указать вручную. Пароль не зашифрован в исходном проекте авторизации.NoOpPasswordEncoder
Он был заброшен и подходит только для использования в тестовой среде.На этот раз мы используемSCryptPasswordEncoder
Шифровальщик паролей шифрует и расшифровывает пароль, что ближе к использованию производственной линии. Другие алгоритмыPbkdf2PasswordEncoder
иBCryptPasswordEncoder
.
Что касается алгоритма Scrpyt, то его сложно атаковать.
Алгоритм Scrpyt был разработан известным хакером FreeBSD Колином Персивалем для его службы резервного копирования Tarsnap. Первоначальный замысел заключался в том, чтобы уменьшить нагрузку на ЦП, как можно меньше полагаться на ЦП и использовать время простоя ЦП для вычислений. только вычисление занимает много времени, а также занимает много памяти, что чрезвычайно затрудняет параллельное вычисление нескольких дайджестов, поэтому сложнее использовать радужную таблицу для выполнения атак грубой силы. Scrpyt широко не используется в производственных средах, ему не хватает тщательной проверки и обширной поддержки библиотек. Таким образом, Scrpyt не был популяризирован, но поскольку его зависящий от памяти дизайн особенно соответствовал дизайну непрофессиональных майнинговых машин того времени, он стал основным направлением применения для разработки алгоритмов цифровой валюты.
BCrypt, с другой стороны, существует уже долгое время и также очень безопасен. в весенней безопасностиBCryptPasswordEncoder
Метод шифрует пароль с помощью SHA-256 + случайная соль + ключ. Серия SHA — это хеш-алгоритм, а не алгоритм шифрования.Использование алгоритма шифрования означает, что его можно расшифровать (это то же самое, что и кодирование/декодирование), но при использовании хеш-обработки этот процесс необратим.
- Шифрование (кодирование): при регистрации пользователя используйте SHA-256 + случайную соль + ключ для хеширования пароля, введенного пользователем, получения хеш-значения пароля и сохранения его в базе данных.
- Сопоставление паролей (совпадения): когда пользователь входит в систему, этап сопоставления паролей не расшифровывает пароль (поскольку пароль необратим после обработки хэша), а использует тот же алгоритм для хеширования пароля, введенного пользователем, для получения хеш-значения. пароля. , а затем сравните его со значением хэша пароля, запрошенным из базы данных. Если они совпадают, пользователь ввел правильный пароль.
Что касается того, как инициализировать пароль и как зашифровать пароль при регистрации пользователя, мы можем вызвать следующий метод при инициализации пароля:
SCryptPasswordEncoder sCryptPasswordEncoder = new SCryptPasswordEncoder();
sCryptPasswordEncoder.encode("frontend");
В этот момент необходимоclient_secret
вносить изменения, напримерfrontend
изменить на:
$e0801$65x9sjjnRPuKmqaFn3mICtPYnSWrjE7OB/pKzKTAI4ryhmVoa04cus+9sJcSAFKXZaJ8lcPO1I9H22TZk6EN4A==$o+ZWccaWXSA2t7TxE5VBRvz2W8psujU3RPPvejvNs4U=
И измените конфигурацию следующим образом:
@Autowired
CustomAuthenticationProvider customAuthenticationProvider;
@Autowired
CodeAuthenticationProvider codeAuthenticationProvider;
@Override
public void configure(AuthenticationManagerBuilder auth) throws Exception {
auth.authenticationProvider(customAuthenticationProvider);
auth.authenticationProvider(codeAuthenticationProvider);
}
@Bean
@Override
public AuthenticationManager authenticationManagerBean() throws Exception {
return super.authenticationManagerBean();
}
@Bean
public PasswordEncoder passwordEncoder(){
return new SCryptPasswordEncoder();
}
ResourceServerConfig
Устаревший, проект аутентификации не включает функции сервера ресурсов.
OAuth2Config
Из-за текущей версииspring-boot-redis
серединаRedisConnection
Недостаток#set
метод, используйте непосредственноRedisTokenStore
Возникает следующее исключение:
java.lang.NoSuchMethodError: org.springframework.data.redis.connection.RedisConnection.set([B[B)V
Так настроитьCustomRedisTokenStore
класс, такой же, как код RedisTokenStore, за исключением того, чтоRedisConnection#set
Вызов метода заменен наRedisConnection#stringCommands#set
,Следующее:
conn.stringCommands().set(accessKey, serializedAccessToken);
conn.stringCommands().set(authKey, serializedAuth);
conn.stringCommands().set(authToAccessKey, serializedAccessToken);
Полный код смотрите по адресу GitHub в конце статьи.
Проверка результата
После вышеуказанного обновления мы проверим следующие конечные точки API:
- Режим пароля для получения токена: /oauth/token?grant_type=password
- Обновить токен: /oauth/token?grant_type=refresh_token&refresh_token=...
- Проверить токен: /oauth/check_token
- выход: /выход
- Авторизоваться: /oauth/авторизовать
- Режим кода авторизации для получения токена: /oauth/token?grant_type=authorization_code
Результаты не отображаются, и их можно использовать в обычном режиме.
резюме
Служба аутентификации OAuth является базовой службой в микросервисной архитектуре. После того, как проект был выпущен, он привлек внимание многих студентов. Многие студенты также высказывали свои сомнения или предложения по этому поводу после присоединения к группе QQ, а также обсуждали и решали сомнения вместе. С обновлением версии Spring Boot и Spring Cloud автор вовремя обновил и этот проект, надеясь помочь детской обуви. Планируемая автором книга о приложениях Spring Cloud будет опубликована в этом месяце, в части о Spring Cloud Security есть подробный анализ, вы можете поддержать подлинную версию.
Адрес источника этой статьи:
Гитхаб:GitHub.com/Доступный ETS2012/A…
Облако кода:git ee.com/can-ets/au-th-…
Подписывайтесь на свежие статьи, приглашаю обратить внимание на мой публичный номер
Связанное Чтение
Ссылаться на
Прошлое и настоящее алгоритма scrypt (изучение блокчейна с нуля 192)