Как приложение JavaScript должно проверять access_token, выданный IdentityServer4?

Например, предположим, что я хочу определить, "вошел ли" пользователь в систему... АКА срок действия их токена еще не истек.

Я сохраняю свой JWT access_token в localStorage, когда мне впервые выдается access_token. Я знаю, что недостаточно просто проверить localStorage, чтобы увидеть, есть ли access_token или нет. Я читал о конечной точке самоанализа, но похоже, что это для API, а не для клиентов JS. Является ли лучшим подходом использование клиентской библиотеки для проверки JWT? Мне это не нравится, потому что есть вероятность, что мне придется переключиться на ссылочные токены. Я хотел бы сделать вызов на стороне сервера для этого.

Как правильно проверить access_token с помощью клиента JavaScript?

Обновление: после дальнейшего изучения и по рекомендации наименьшей привилегии я буду использовать клиент JavaScript OIDC так что мне не нужно беспокоиться об этом.


person Rob L    schedule 10.04.2017    source источник


Ответы (3)


Клиентские приложения не должны «декодировать» токен доступа. Точный формат — это деталь реализации между эмитентом и API.

При запросе токена доступа ответ токена содержит параметр «expires_in», который сообщает клиенту, сколько секунд действителен токен.

person leastprivilege    schedule 10.04.2017
comment
Итак, если бы я создавал пользовательский интерфейс с помощью JavaScript и мне нужно было определить перед каждой загрузкой представления, требуется ли новый токен (и, следовательно, пользователь должен быть перенаправлен на страницу входа), могу ли я проверить «expires_in» или это было бы лучше иметь какой-то внешний обработчик, который будет перенаправлять пользователей на страницу входа всякий раз, когда из моего API возвращается ошибка 401? Наверняка это обычная ситуация - person Rob L; 11.04.2017
comment
Используйте библиотеку, например github.com/IdentityModel/oidc-client-js, которая выполняет пожизненный мониторинг для вас и управление обновлением в фоновом режиме. См. также vimeo.com/205451987. - person leastprivilege; 11.04.2017
comment
К сведению: я следовал этому примеру для клиентского приложения, прежде чем решил использовать клиент OIDC Js. github.com/IdentityServer/ IdentityServer3.Samples/blob/master/ - person Rob L; 20.04.2017

Большинство токенов jwt поставляются с полем даты истечения срока действия (хотя это зависит от сервера). Вы можете использовать библиотеку, например this, для декодирования токена JWT перед его сохранением в локальном хранилище и затем сохраните время истечения внутри с токеном, чтобы вы могли просто проверить локальное хранилище и время истечения срока действия, и если текущий день больше, чем время истечения срока действия, вы отбрасываете предыдущий токен и получаете новый.

person akinmail    schedule 10.04.2017

Эта библиотека может быть вам полезна: oidc-client-js. Некоторая документация доступна здесь.

person Rob Davis    schedule 10.04.2017