Я только начинаю исследовать тему ассиметричного шифрования и пар открытого и закрытого ключей и т. Д., И у меня кружится голова, поэтому заранее извиняюсь, если приведенные ниже вопросы являются очень простыми.
Для справки: я следую вместе с отличным учебником https://blog.angular -university.io / angular-jwt-authentication / по шифрованию и настройке JWT's
. Пример кода в значительной степени относится к сторонней аутентификации, но прежде чем я попробую это, я хотел бы сначала попытаться обработать аутентификацию на моем собственном бэкэнде Express. Поэтому мои вопросы ниже относятся исключительно к аутентификации в моем собственном бэкэнде Express.
Насколько я понимаю, процесс аутентификации заключается в том, что мы подписываем JWT
на бэкэнде, используя RSA_PRIVATE_KEY
, передаваяJWT
для внешнего интерфейса в качестве ответа json
на POST аутентификации, а затем для последующих запросов сервер проверяет входящий JWT
, используя RSA_PUBLIC_KEY
. Имея это в виду, у меня есть три вопроса, как показано ниже:
Первое, что мне не ясно, касается того, сколько пар ключей необходимо. Например, предположим, что в нашем приложении много тысяч пользователей, каждый из которых имеет несколько сеансов в день. Мое предварительное понимание состоит в том, что серверу нужна ОДНА пара закрытых / открытых ключей, чтобы подписать и проверить все JWTs
- для всех пользовательских сессий за незапамятные времена - но я хотел бы убедиться, что мое понимание верно, иесли нет, нужна ли отдельная пара открытого / закрытого ключа для пользователя? или даже за сеанс?
Независимо от того, сколько пар ключей необходимо, каков наилучший способ (или некоторые варианты) сделать это в Express? Когда я выполняю поиск в Интернете, я не вижу ничего конкретного, связанного с Express. Я вижу ряд решений CLI, таких как openssl
, и вижу несколько пакетов для Node.js, таких как crypto
(но большинство сообщений для них довольно старые). Вот более свежая публикация: Как генерировать пары открытых / закрытых ключей с использованием openssl в nodejs? , но это решение все еще использует командную строку для генерации пар ключей. Я поднимаю этот вопрос, потому что я предполагаю, что пары ключей должны периодически вращаться, и я думаю, что не имеет смысла периодически вручную генерировать пары в командной строке, поэтому не имеет смыслаавтоматизировать генерацию пары ключей в самом бэкэнде?
Последний бонусный вопрос: так как ключи PRIVATE и PUBLIC остаются на сервере все время в развертывании аутентификации, которое я обрисовал выше, справедливо будет сказать, что PUBLICключ действительно не "ОБЩЕСТВЕННЫЙ" в этом случае? (или я что-то неправильно понимаю?).
Заранее большое спасибо за то, что пролили свет на эти проблемы и помогли новичку быстро освоить эту тему !!