Немного поздно, но все же ...
Вы правы в том, что маркер обновления не должен возвращаться Неявным грантом , который используется для аутентификации пользователей в приложениях SPA. И да, ограничение связано с тем, что браузер не может держать его в секрете.
1 - Можем ли мы использовать токен для длительного доступа в спа? Это безопасно?
Мы можем, но будет ли это безопасно, будет зависеть от политики безопасности вашего приложения.
Короче говоря, здесь - это пример того, как можно считать срок службы токена доступа указанным для различных требований безопасности.
2 - Является ли альтернативное решение для обновления токена?
Да, это называется Тихая аутентификация и вкратце это выглядит так:
- клиент (приложение SPA) получает токен доступа, а expires_in параметр
- Identity Server предоставляет сеанс аутентификации (cookie), поэтому приложение может запросить новый токен без предоставления учетных данных, поскольку он уже аутентифицирован на Identity Server
- в случае истечения времени скольжения клиент отправляет запрос на Identity Server, чтобы поддерживать сеанс в течение необходимого времени
- как только срок действия маркера доступа истекает, а сеанс аутентификации активен (может потребоваться проверка), клиент запрашивает другой токен доступа (обычно это делается в
setTimeout
), но в этом случае предоставляет параметр для Identity Server, что экран согласия должен быть удален (обычно это prompt=none
)
Ресурсы:
Автоматическая аутентификация Azure AD
Auth0 Тихая аутентификация
3 - должны ли мы использовать сторонний сервер идентификации, такой как identityserver 4, или мы можем реализовать генерацию токенов сами). Что лучше
практика?
Это будет зависеть от размера вашего приложения и от того, требуется ли вам просто создание токена или что-то еще (например, федеративная аутентификация «из коробки», различные типы грантов и т. Д.).
Для крупных предприятий (если нет необходимости заново изобретать колесо) всегда рекомендуется использовать готовую к работе стороннюю библиотеку ( Identity Server 4 или OpenIddict ), если только у вас нет небольшое приложение (MVP, прототип и т. д.).
Identity Server 4 требует определенных усилий для правильной настройки и может быть просто чрезмерным. OpenIddict - немного более простая альтернатива.
Создание пользовательских токенов - это то, что мы делали до появления Identity Server. Сегодня это только вопрос быстрого решения ваших пользовательских задач аутентификации.
Стоит упомянуть этот проект JWTSimpleServer для простой аутентификации JWT.