использоватьRedis
хранитьOAuth2
Соответствующая информация о клиенте и сгенерированнаяAccessToken
хороший выбор,Redis
Присущая высокая эффективность и развертывание кластера являются отличными функциями, если их использовать в качестве服务认证中心
Хранение данных может значительно повысить эффективность реагирования.
Redis
Он также поддерживает функцию автоматического удаления с течением времени,OAuth2
генерируетсяAccessToken
Соответствующие данные превышают настроенные有效时间
После этого он будет автоматически очищен, что также косвенно повышает безопасность интерфейса.
теперь, когдаRedis
Это можно сделать так хорошо, как мы реализуем логику кода?
ApiBoot OAuth2
поддерживается для использованияRedis
хранитьAccessToken
Да, просто нужно изменитьapplication.yml
Конфигурация может быть достигнута, и соответствующее использование также можно понять, просмотрев документацию.
ApiBoot Security OAuth Component Series Статьи
- ApiBoot реализует интеграцию Spring Security и OAuth2 без кода.
- Интеграция ApiBoot с нулевым кодом метода JDBC Spring Security для получения AccessToken
- Вы когда-нибудь видели такой простой способ интеграции пользовательского запроса Spring Security и OAuth2?
- Spring Security и OAuth2 реализуют код проверки SMS для получения AccessToken
- Получается, что после того, как Spring Security интегрирует OAuth2, путь перехвата открытых разрешений все еще может так играть?
- Я думал, что будет сложно интегрировать JWT с OAuth2, пока я не использовал ApiBoot, и все изменилось!
- Давайте посмотрим, как OAuth2 устанавливает срок действия AccessToken.
- OAuth2 использует Redis для хранения информации о клиенте, а также AccessToken.
Создать проект
Мы используемIDEA
инструменты разработчика для созданияSpringBoot
проект, в проектеpom.xml
добавляем что нам нужноApiBoot
из统一版本
зависеть от и安全组件
зависимости следующим образом:
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.minbox.framework</groupId>
<artifactId>api-boot-starter-security-oauth-jwt</artifactId>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.minbox.framework</groupId>
<artifactId>api-boot-dependencies</artifactId>
<version>2.2.0.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
Добавить поддержку Redis
Поскольку нам нужно использоватьRedis
, нам нужно добавить связанные зависимости в проект,SpringBoot
Предоставил нам упакованные зависимости, вpom.xml
внутри файлаdependencies
Добавьте его под узел следующим образом:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
Настроить информацию о подключении к Redis
SpringBoot
правильноRedis
Соединение, операция с данными запакована, нам нужно толькоapplication.yml
Добавьте ответ в файл конфигурацииRedis
информация о соединении.
spring-boot-starter-data-redis
Конфигурация, требуемая зависимостями, предоставляетсяRedisProperties
Предоставляемые классом, некоторые поля конфигурации в этом классе имеют значения по умолчанию, а некоторые исходные коды выглядят следующим образом:
@ConfigurationProperties(prefix = "spring.redis")
public class RedisProperties {
/**
* Database index used by the connection factory.
*/
private int database = 0;
/**
* Connection URL. Overrides host, port, and password. User is ignored. Example:
* redis://user:password@example.com:6379
*/
private String url;
/**
* Redis server host.
*/
private String host = "localhost";
/**
* Login password of the redis server.
*/
private String password;
/**
* Redis server port.
*/
private int port = 6379;
//...
}
Подключить по умолчаниюRedis
просто нужноapplication.yml
настроитьspring.redis.password
,Следующее:
spring:
# 配置Redis连接信息
redis:
password: 123123
password
подключенRedis
требуемый пароль, вredis.conf
конфигурация в файле.
Связанное объяснение конфигурации:
-
spring.redis.database
: если вы используетеRedis DataBase
не по умолчанию0
index, вам нужно изменить конфигурацию -
spring.redis.host
: по умолчаниюlocalhost
, если он не используется локально, необходимо изменить конфигурацию -
spring.redis.url
: это строка подключения, если она настроена, она будет автоматически перезаписанаdatabase
,host
,port
и другие три информации о конфигурации -
spring.redis.port
: по умолчаниюRedis
номер порта6379
, если изменитьRedis
Номер порта прослушивания, вам необходимо изменить эту конфигурацию
Включить ApiBoot OAuth Redis
ApiBoot OAuth
при условииredis
параметры конфигурации, вapplication.yml
через файлapi.boot.oauth.away
Параметры конфигурации задаются следующим образом:
api:
boot:
security:
# 配置内存安全用户列表
users:
- username: yuqiyu
password: 123123
oauth:
# 配置使用Redis存储OAuth2相关数据
away: redis
# 配置客户端列表
clients:
- clientId: minbox
clientSecret: chapter
Для удобства демонстрации используемApiBoot Security
Режим памяти настраивается пользователемyuqiyu
, но также изменил значение по умолчаниюclient
информация, добавленоminbox
клиент.
если правильноApiBoot Security
конфигурация пользователя илиApiBoot OAuth
Если вы не понимаете конфигурацию клиента , вы можете проверить официальную документацию:
запустить тест
Перед запуском теста мы добавляемApiController
Контроллер, используемый для тестирования, код выглядит следующим образом:
/**
* 测试Api控制器
*
* @author 恒宇少年
*/
@RestController
@RequestMapping(value = "/api")
public class ApiController {
/**
* 测试请求,需携带令牌访问
*
* @return
*/
@GetMapping(value = "/index")
public String index() {
return "this is index";
}
}
Контрольная точка: просмотрите AccessToken, хранящийся в Redis.
Ожидаемый эффект заключается в том, что когда мы отправляем выборкуAccessToken
запросы, сгенерированныеAccessToken
хранить вRedis
.
Ниже мы используемCURL
команда, чтобы попытаться получить следующийAccessToken
,Следующее:
➜ ~ curl minbox:chapter@localhost:9090/oauth/token -d 'grant_type=password&username=yuqiyu&password=123123'
{"access_token":"38a7ee20-2fad-43c5-a349-31e6f0ee0f29","token_type":"bearer","refresh_token":"f469b1e8-f63c-4be9-8564-2603f8458024","expires_in":7199,"scope":"api"}
Ниже мы используемredis-cli
Посмотрим, было ли этоAccessToken
хранить вRedis
,Следующее:
➜ ~ redis-cli
127.0.0.1:6379> auth 123123
OK
127.0.0.1:6379> keys *
1) "uname_to_access:minbox:yuqiyu"
2) "refresh_to_access:f469b1e8-f63c-4be9-8564-2603f8458024"
3) "access_to_refresh:1ea8e5cd-ea63-4a73-969f-9e7767f25f30"
4) "auth:38a7ee20-2fad-43c5-a349-31e6f0ee0f29"
5) "refresh_auth:6898bef4-f4a7-4fa9-858b-a4c62a1567d8"
6) "refresh:6898bef4-f4a7-4fa9-858b-a4c62a1567d8"
7) "refresh_auth:f469b1e8-f63c-4be9-8564-2603f8458024"
8) "access:38a7ee20-2fad-43c5-a349-31e6f0ee0f29"
9) "refresh_to_access:6898bef4-f4a7-4fa9-858b-a4c62a1567d8"
10) "auth_to_access:f02ceb5faa4577222082842b82a57067"
11) "refresh:f469b1e8-f63c-4be9-8564-2603f8458024"
12) "access_to_refresh:38a7ee20-2fad-43c5-a349-31e6f0ee0f29"
13) "client_id_to_access:minbox"
Результаты часто бывают неожиданными, поскольку здесь мы успешно поставилиOAuth2
СгенерированоAccessToken
хранится вRedis
,еслиAccessToken
Соответствующие данные превышаютexpires_in
время, оно будет автоматически очищено.
Тестовая точка: интерфейс доступа с AccessToken
мы можем взять сгенерированныйAccessToken
чтобы получить доступ к тесту, добавленному вышеApiController
интерфейс внутри, следующим образом:
➜ ~ curl -H 'Authorization: Bearer 38a7ee20-2fad-43c5-a349-31e6f0ee0f29' http://localhost:9090/api/index
this is index
Мы можем получить возвращенный интерфейс интерфейса, что также доказывает, чтоAccessToken
Верификация не проблема,OAuth2
осуществляется по запросуAccessToken
идти сRedis
Проверка пройдена.
Постучать по доске, нарисовать ключ
ApiBoot OAuth
поддерживается3种
Методы хранения были описаны в статье, каждый метод был оптимизирован, простая конфигурация и добавление связанных зависимостей могут реализовать интеграцию, которая раньше вызывала много головной боли.
Если объем данных в производственной среде велик, рекомендуется использовать
Redis
кластер для адресации хранилищаAccessToken
Проблема.
Если вы не знаете о двух других методах хранения ApiBoot OAuth, вы можете проверить, что я написалApiBoot
Серия статей:Краткое содержание цикла статей об использовании различных компонентов фреймворка с открытым исходным кодом ApiBoot
пример кода
Если вам понравилась эта статья, нажмите на репозиторий исходного кодаStar
,Благодарность! ! ! Образец исходного кода этой статьи можно получить по следующим каналам, каталогapiboot-oauth-use-redis-storage
:
- Гостиница:git ee.com/min-exploitation-pro т.е...
автор личноблог
Используйте фреймворк с открытым исходным кодомApiBootПомочь вам стать архитектором сервисов интерфейса API