В соответствии с секретом пользователя JWT - PullRequest
1 голос
/ 31 октября 2019

Я пытаюсь реализовать конечную точку отдыха, которая позволяет пользователю выходить из всех устройств, в которые вошел пользователь.

Я ищу динамически сгенерированный секрет для каждого пользователя. В настоящее время я пытаюсь some_global_secret + user_email + random_uuid в качестве секрета.

, чтобы позволить пользователю входить и выходить из нескольких устройств. и если пользователь хочет выйти из всех устройств. все, что мне нужно сделать, это просто сгенерировать новый секретный ключ для пользователя, и все оставшиеся токены теперь будут недействительными. если пользователь изменяет свой пароль, это позволит как выбрать выход из текущего устройства, так и все другие устройства.

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

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

Я думаю о передачезакодированное электронное письмо как своего рода заголовок, и клиент должен передать этот заголовок для всех защищенных конечных точек. Это хороший подход?

Любое руководство будет с благодарностью

1 Ответ

1 голос
/ 01 ноября 2019

Интересная идея.

Вы можете распространить свою идею на подписанную полезную нагрузку внутри JWT. По сути, JWT внутри JWT. Внешний JWT подписан с общим секретом. Внутренний JWT подписан секретом для каждого пользователя. Вы проверяете внешний JWT (который дает вам ссылку на пользователя), а затем вы пытаетесь проверить внутренний JWT;если вы не можете (потому что секрет пользователя был вывернут), то он потерпит неудачу.

Внутреннее поле не обязательно должно быть другим JWT;на самом деле это просто должно быть что-то подписанное (например, HMAC), которое вы можете проверить с помощью текущего секрета для каждого пользователя.

...