Spring Cloud Security JWT: распространение открытого ключа с использованием сервера конфигурации / ротации ключей

Как вы управляете своими частными / открытыми ключами для подписания / проверки JWT в среде Spring Cloud?

Эта проблема":

На данный момент я генерирую пару ключей. Затем скопируйте Private + Public Key на мой auth-server приложение. А также скопируйте открытый ключ на каждый сервер ресурсов.

Когда я теперь хочу реализовать "Поворот ключей", я должен как-то заполнить новые ключи для каждого сервиса.


Идея:

Может быть, я мог бы использовать spring-cloud-config-server хранить и распространять ключевые пары?

Сервер конфигурации уже предоставляет учетные данные для входа в базу данных. Так почему бы не хранить там еще более конфиденциальную информацию?


Вопросы):

Если это путь: как бы вы реализовали распределение пары ключей с помощью spring-cloud-config-server?

У вас есть проблемы с безопасностью?

Как вы решили эту проблему? Я думаю, есть лучшие решения.


РЕДАКТИРОВАТЬ:

Может быть, есть какое-то решение с использованием Spring Oauth's security.oauth2.resource.jwt.keyUri недвижимость для JWKs?

2 ответа

Вам следует рассмотреть возможность использования Spring Cloud Consul Config:

Консул предоставляет хранилище ключей / значений для хранения конфигурации и других метаданных. Spring Cloud Consul Config является альтернативой серверу и клиенту Config. Конфигурация загружается в среду Spring во время специальной фазы начальной загрузки. Конфигурация хранится в папке /config по умолчанию. Несколько экземпляров PropertySource создаются на основе имени приложения и активных профилей, которые имитируют порядок разрешения свойств в Spring Cloud Config.

Вы можете отправить / обновить, чтобы обновить ваш ключ, или следить за изменениями:

Consul Config Watch использует возможность консула наблюдать за ключевым префиксом. Config Watch выполняет блокирующий вызов Consul HTTP API, чтобы определить, изменились ли какие-либо соответствующие данные конфигурации для текущего приложения. Если имеются новые данные конфигурации, публикуется событие обновления.

Прежде всего, у меня был бы шлюз, чтобы скрыть механизм JWT. Это позволит вам отозвать токены из шлюза. Если пользователь знает о своем токене, вы не можете отозвать его без отзыва открытого ключа. Это будет выглядеть так:

Это легко реализовать с помощью фильтров zuul и сессионных компонентов.

Во-вторых, если вы сказали это в комментариях, вы можете просто создать новый закрытый ключ для генерации новых токенов. Но все ваши серверы ресурсов должны быть в состоянии прочитать все ранее сгенерированные токены. Поэтому вам необходимо иметь список открытых ключей на каждом сервере ресурсов, и каждый раз, когда вы получаете запрос, вы должны пытаться проверять его с каждым открытым ключом. Возможно, вы можете иметь идентификатор открытого ключа (и поставить идентификатор на каждый сгенерированный токен), чтобы избежать глупого поиска этой задачи.

Для распределения ключей используйте весеннюю облачную шину и кролик mq мне кажется правильным.

Другие вопросы по тегам