У меня общий вопрос по аутентификации на основе токенов. Я видел несколько руководств, которые, кажется, говорят о противоречивых вещах, поэтому я запутался:
Вопрос
Кто должен нести ответственность за создание JWT, разработчик приложения (через внутренний сервер приложения) или сервер аутентификации (например, поставщик удостоверений)?
(1) Здесь [0] объясняется, что разработчик должен сгенерировать + ha sh JWT и использовать его в качестве токена-носителя для любого запроса. Оттуда сервер аутентификации может использовать общий секретный ключ для проверки токена.
(2) Здесь [1] говорится, что сервер аутентификации генерирует JWT и возвращает его клиент после того, как логин предоставлен + подтвержден (на стороне разработчика не задействован внутренний сервер).
Какой из них правильный? Если они оба верны, как мне узнать, какой из них использовать?
Насколько я понимаю:
(1) # 1 выше - это тот, где разработчик хранит секрет на внутреннем сервере их приложение. Бэкен служит посредником между клиентом и сервером аутентификации для выполнения аутентифицированных запросов без раскрытия секретного + токена доступа.
(2) # 2 выше - это тот, где у приложения вообще нет бэкэнд-сервера ( SPA, такие как Angular / React). Клиент взаимодействует с сервером аутентификации напрямую (без секретов). Согласно [1], IdP использует только идентификатор клиента, область действия и некоторые другие параметры для создания JWT.
[0] https://enable.cx.sap.com/media/1_uup99qpg (переход к 1:49)
[1] https://auth0.com/blog/handling-authentication-in-react-with-context-and-hooks/ (прокрутите вниз до первого блока кода в разделе «Добавить аутентификацию в ваше приложение», где настроен экземпляр Auth0)