У меня есть приложение для реагирования, которое использует конечную точку Keycloak token_endpoint для аутентификации пользователя. Проблема, с которой я столкнулся сейчас, заключается в том, как обновить/обновить этот токен. Я знаю, что могу использовать токен обновления, но это плохая практика, поскольку возникает проблема безопасности, когда речь идет о веб-приложении. Мне кажется, что лучшим подходом будет использование Silent Authentication.
К сожалению, я не смог найти ни одного примера или документации, позволяющей мне добиться этого. Если у вас, ребята, есть другой подход, я открыт для предложений.
спасибо
Это не догадка... Существует множество материалов, объясняющих, почему хранить токен обновления в браузере (SPA) — плохая идея. «Токены обновления долговечны. Это означает, что когда клиент получает один с сервера, этот токен должен храниться в безопасном месте, чтобы предотвратить его использование потенциальными злоумышленниками, по этой причине хранить их в браузере небезопасно. .." Подробнее: auth0.com/learn/refresh-токены
Если вы не доверяете маркерам обновления в браузере, используйте адаптер на стороне сервера. Это создаст файл cookie браузера для веб-сеанса, который будет связан с кортежами токенов доступа/обновления на стороне сервера. Тем не менее, имейте в виду, что если кто-то украдет ваш файл cookie и он будет жить долго, он может взломать вашу учетную запись. Если вы не можете доверять своим пользователям в этом, вам следует попытаться свести к минимуму ущерб, который может нанести хакер с украденным токеном/куки. Но, как я уже сказал, большинство сайтов в Интернете полагаются на хранилище браузера для управления своими сеансами.





Это будет состоять только из предоставления параметра prompt=none в запросе аутентификации, как указано в спецификации OpenID Connect 1.0 Core:
https://openid.net/specs/openid-connect-core-1_0.html#AuthRequest
prompt OPTIONAL.
Space delimited, case sensitive list of ASCII string values that specifies whether the Authorization Server prompts the End-User for reauthentication and consent. The defined values are:
none
The Authorization Server MUST NOT display any authentication or consent user interface pages. An error is returned if an End-User is not already authenticated or the Client does not have pre-configured consent for the requested Claims or does not fulfill other conditions for processing the request. The error code will typically be login_required, interaction_required, or another code defined in Section 3.1.2.6. This can be used as a method to check for existing authentication and/or consent.
Привет Ганс, не уверен, как это будет работать. Сегодня я делаю запрос к localhost:8082/auth/realms/my-realm/protocol/openid-connect/…, чтобы мой пользователь аутентифицировался. Затем я получаю токен, обновляю токен и т. д. Как я могу обновить свой токен на основе этого параметра prompt=none Должен ли я отправить запрос на получение обновленного токена на конечную точку?
/auth (подсказка=логин).grant_type=refresh_token, чтобы обновить токен с помощью access_token. новый ответ включает в себя access_token, refresh_token и так далее.
Что заставляет вас думать, что использование токенов обновления связано с проблемой безопасности? Я предлагаю вам поискать ссылки об этом и не доверять своей простой догадке. OAuth является наиболее широко используемым протоколом безопасности в настоящее время, и он очень надежен при использовании его с надлежащим протоколом безопасной передачи в целом.