Попытка реализовать OpenId Connect в веб-приложении, состоящем из следующих компонентов
- Провайдер идентификации
- Сервер ресурсов
- Одностраничное приложение, выступающее в роли клиента.
Поставщик удостоверений и сервер ресурсов - это одно и то же приложение.
SPA использует поток паролей для получения access_token и сохранения в cookie. Сохранение access_token в cookie имеет потоки безопасности, но это другая история.
Проблема
Срок действия access_token, выданного IdP, истекает через 30 минут, и SPA необходимо обновить токен без повторного запроса учетных данных у пользователей.
Решение
IdP возвращает refresh_token вместе с access_token. Когда SPA получает 401 от сервера ресурсов, он отправляет refresh_token IdP и возвращает новый access_token.
Проблема
Отправка refresh_token в SPA является плохой практикой.
Одностраничное приложение (обычно реализующее неявное предоставление) ни при каких обстоятельствах не должно получать токен обновления. Причина этого - конфиденциальность этой информации. Вы можете думать об этом как об учетных данных пользователя, поскольку токен обновления позволяет пользователю оставаться аутентифицированным практически навсегда. Поэтому вы не можете хранить эту информацию в браузере, она должна храниться в надежном месте.
Предлагаемое решение
Когда срок действия токена доступа истек, можно использовать автоматическую аутентификацию для получения нового без взаимодействия с пользователем, если срок сеанса единого входа пользователя не истек.
Я думаю, что Тихая аутентификация не применима к потоку паролей, когда IdP и сервер ресурсов такое же приложение. access_token, выданный IdP, - это только часть информации, которая может использоваться для авторизации на сервере ресурсов / IdP после истечения срока ее действия. Как клиент может убедить IdP выпустить новый access_token? (без отправки refresh_token)
Обнаружена библиотека angular-oauth2-oidc, которая использует refresh_token для обновления access_token.
Каков наилучший метод / решение в этом случае продлить access_token?
технические подробности
- Поставщик удостоверений - библиотека ASP.NET Core + Openiddict.
- SPA - приложение AngularJs.