Oid c client js, не используйте Date.now в клиенте - PullRequest
0 голосов
/ 13 января 2020

Я использую oid c -client- js в моем клиенте для одного из моих проектов SPA. У меня есть идентификационный сервер, который написан на IdentityServer4 .

. Если я вручную изменяю дату и время сервера, oid c -client- js не могу проверить ответ сервера при входе пользователя в систему, потому что время даты не совпадает.

А также, если я вручную изменяю дату и время клиента и сохраняю сервер с опцией автоматической даты и времени, снова ответ с сервера недействителен.

Я думаю, что любое решение JavaScript для работы с датой и временем не является надежным, и все даты и время должны быть проверены на сервере.

Как я могу проверить токен на сервере, а не на клиенте?

Правильно ли мое предположение? И если это не правильно, есть ли решение для oid c -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 Ответ

0 голосов
/ 15 января 2020

Время должно быть правильным. На сервере или на клиенте это не имеет значения, но это должно быть фактическое время. Если вы сошли с ума со временем, требования к токену (iat, nbf, et c.) Могут представлять момент в прошлом или будущем, поэтому он не будет работать.

Почему бы вам изменить дата / время сервера или клиента на неверный?

Как проверить токен на сервере, а не на клиенте?

На SPA все, что связано с oid c, происходит в коде клиента, включая проверку токена.

Это не единственная и не самая важная проверка, которую клиент выполняет с токеном; основная проверка - это проверка, подписанная парой ключа publi c, предоставленного полномочным органом.

Я думаю, что любое решение JavaScript для работы с датой и временем не является надежным, и все даты и время должны быть проверены на сервере.

Зачем доверять часам сервер больше, чем часы на клиентском компьютере, как насчет настольных приложений, как насчет автономного ...

...