Oidc client js, не используйте Date.now в клиенте
Я использую oidc-client-js в своем клиенте для одного из моих проектов SPA. У меня есть идентификационный сервер, написанный на IdentityServer4.
Если я изменяю дату и время сервера вручную, oidc-client-js не может проверить ответ сервера при входе пользователя в систему, потому что время даты не совпадает.
А также, если я изменяю дату и время клиента вручную и сохраняю сервер с опцией автоматического времени, снова ответ от сервера недействителен.
Я думаю, что любое решение JavaScript для работы с датой и временем ненадежно, и все даты должны проверяться на сервере.
Как я могу проверить токен на сервере, а не на клиенте?
Верно ли мое предположение? И если это неверно, есть ли какое-нибудь решение для oidc-client-js, чтобы использовать время сервера вместо времени браузера?
Это моя конфигурация клиента
const userManagerConfig = {
client_id: '58bdb6b3dd264200a1186573a8abf884',
redirect_uri: `${window.location.protocol}//${window.location.hostname}${window.location.port ? `:${window.location.port}` : ''}/authentication/callback`,
response_type: 'code',
post_logout_redirect_uri: `${window.location.protocol}//${window.location.hostname}${window.location.port ? `:${window.location.port}` : ''}`,
scope: 'openid profile phone tes.api',
authority: `http://localhost:5016`,
silent_redirect_uri: `${window.location.protocol}//${window.location.hostname}${window.location.port ? `:${window.location.port}` : ''}/authentication/silent_callback`,
automaticSilentRenew: true,
filterProtocolClaims: true,
loadUserInfo: true,
triggerAuthFlow : true
};
1 ответ
Время должно быть правильным. На сервере или на клиенте это не имеет значения, но это должно быть фактическое время. Если вы умерли со временем, утверждения на токен (iat, nbf и т. Д.) Могут представлять момент в прошлом или будущем, поэтому он не сработает.
Зачем вам менять дату / время сервера или клиента на недопустимые?
Как я могу проверить токен на сервере, а не на клиенте?
В SPA все, что связано с oidc, происходит в клиентском коде, включая проверку токена.
Это не единственная и не самая важная проверка, которую клиент выполняет для токена. Основная проверка - это проверка, подписанная парой открытого ключа, предоставленной органом.
Я думаю, что любое решение JavaScript для работы с датой и временем ненадежно, и все даты должны проверяться на сервере.
Почему часам на сервере больше доверяют, чем часам на клиентской машине, как насчет настольных приложений, как насчет офлайн...