Что происходит, когда срок действия сертификата подписи (используемого для подписи токенов jwt) истекает при использовании IdentityServer 3?
Мне это непонятно, и я не могу найти никакой документации, кроме того, что можно получить предупреждение о том, что срок ее действия истек. (Ссылка https://identityserver.github.io/Documentation/docsv2/configuration/events.html)
Существует ли какой-либо механизм, который останавливает использование сертификатов подписи с истекшим сроком действия?
И что происходит на стороне клиента (клиентом является веб-API, использующий IdentityServer для аутентификации) при проверке токена, подписанного сертификатом с истекшим сроком действия? (Например, если в качестве промежуточное ПО.)
Ответ 1 · рейтинг 3 · Matt
Что ж, я только что протестировал это (на IdentityServer4), и, похоже, он продолжает успешно работать с просроченным сертификатом подписи, вот действительность моего тестового сертификата:
Я могу войти в систему, получить токен идентификатора и токен доступа, а затем получить доступ к API с токеном доступа. Однако IdentityServer регистрирует предупреждение:
2017-07-13 12:15:54.871 +02:00 [Warning]
Certificate "CN=test_expired_signing_certificate" has expired on "13/07/2016 14:14:37"
Это соответствует тому, что говорится в документах IdentityServer (3) здесь:
IdentityServer вызывает ряд событий во время выполнения, например:
обрезать...
- Просроченный/недействительный/неподписанный сертификат
По умолчанию эти события перенаправляются настроенному поставщику журналов - настраиваемая служба событий может обрабатывать или пересылать их любым способом, подходящим для среды.
Так что это будет ваш способ обнаружить его, когда уже слишком поздно. Лучшим вариантом является периодическое обновление ключей подписи и в течение срока действия ключей. Это распространенный подход, который также позволяет при необходимости отозвать скомпрометированный ключ. См. эту проблему, где обсуждается процесс, в основном IdentityServer может обрабатывать два ключа:
[Промежуточное ПО обновляет] документ метаданных... один раз в день.
Документ с метаданными может содержать 2 ключа - первичный и вторичный, и промежуточное ПО будет загружать и использовать оба, если они присутствуют (JWT имеют идентификатор ключа, который позволяет выбрать правильный).
Когда начнете прокручивать - установите оба ключа и в какой-то момент поменяйте местами первичный и вторичный.
Ответ 2 · Heinzlmaen
Отказ от ответственности: я никогда не работал с IdentityServer3
Внешний мир не знает ваш сертификат и, следовательно, не знает, что срок его действия истек. Внешний мир просто видит ваш открытый ключ по адресу:
YourIdentityServer.com/.well-known/openid-configuration
или точнее:
YourIdentityServer.com/.well-known/openid-configuration/jwks
Вы можете поэкспериментировать с этим: создайте новый сертификат при запуске (см. /mykeels/408a26fb9411aff8fb7506f53c77c57a). Даже если вы установите TimeSpan на одну минуту, он продолжит работать.
Но как только вы подождете 1 минуту и перезапустите свой IdentityServer, ваш токен из последнего входа будет считаться недействительным, поскольку он был создан с устаревшим ключом подписи. Он сверяется с новым открытым ключом и терпит неудачу.
Кажется, рекомендуется периодически заменять ваш сертификат новым, сохраняя при этом предыдущий ключ, см. обновление ключа подписи: https://docs.identityserver.io/en/dev/topics/crypto.html#signing-key-rollover