Я получил эту настройку для моего приложения:
- Keycloak server
- Бэкэнд nodejs с защитным ключом (только на предъявителя)
- Интерфейс PHP / Reactjs
Фронтенд может быть защищен при входе. Для некоторых пользователей потребуется войти в систему, что перенаправит пользователя на сервер Keycloak. После того, как пользователь вошел в систему, у внешнего интерфейса будет токен на предъявителя, чтобы сделать вызовы API к защищенному ключу бэкэнду.
Моя проблема в том, как получить токен на предъявителя для пользователей, которым не нужно входить в систему (анонимные пользователи).
Я попробовал этот подход:
- Создан «конфиденциальный» клиент для использования PHP.
- Frontend PHP получает токен на предъявителя, используя client_id и client_secret, и передает их в javascript (я имею в виду вывод значений токена внутри тега, который является глобальной переменной)
- Первоначально интерфейс делает успешные вызовы API, потому что access_token, переданный php, свежий / действительный.
- После истечения срока действия access_token мне нужно будет получить новый, используя refresh_token.
- Но для этого мне нужен client_secret, которого нет в приложении js (и, как вы знаете, не рекомендуется сохранять client_secret и пароль в приложении js).
Я застрял здесь. Я исследовал, прочитал много документации, но не смог найти способ достичь этого.
Еще одна идея, которая пришла мне в голову, состояла в том, чтобы сделать носитель access_token долгоживущим (например, 1 час). Но некоторые пользователи могут использовать приложение более часа.
На данный момент, я не уверен, возможно ли совершать анонимные звонки в защищенный бэкэнд-ключ из веб-приложения javascript.
Это неправильно, что очень долго (например, 6 часов) access_tokens? Какие еще варианты у меня есть?