Identityserver4 Oidc客户端js,在客户端中不使用Date.now

Identityserver4 Oidc客户端js,在客户端中不使用Date.now,identityserver4,oidc-client-js,oidc-client,Identityserver4,Oidc Client Js,Oidc Client,我在我的一个水疗项目中使用我的客户。 我有一个写在中的身份服务器 如果我手动更改服务器的日期时间,则无法在登录用户中验证服务器的响应,因为日期时间不相同 而且,如果我手动更改客户端的日期时间,并使用自动日期时间选项保留服务器,则来自服务器的响应同样无效 我认为任何处理日期时间的JavaScript解决方案都不可靠,所有日期时间都必须在服务器中验证 如何验证服务器中的令牌而不是客户端中的令牌 我的假设正确吗? 如果不正确,是否有任何解决方案可以使用服务器时间而不是浏览器时间 这是我的客户端配置 c

我在我的一个水疗项目中使用我的客户。 我有一个写在中的身份服务器

如果我手动更改服务器的日期时间,则无法在登录用户中验证服务器的响应,因为日期时间不相同

而且,如果我手动更改客户端的日期时间,并使用自动日期时间选项保留服务器,则来自服务器的响应同样无效

我认为任何处理日期时间的JavaScript解决方案都不可靠,所有日期时间都必须在服务器中验证

如何验证服务器中的令牌而不是客户端中的令牌

我的假设正确吗? 如果不正确,是否有任何解决方案可以使用服务器时间而不是浏览器时间

这是我的客户端配置

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
};

时间必须是正确的。无论是在服务器上还是在客户机上,这都无关紧要,但必须是实际时间。如果你对时间感到不满,那么在代币iat、nbf等上的声明可能代表了过去或未来的某个时刻,因此它不会起作用

为什么要将服务器或客户端的日期/时间更改为无效的日期/时间

如何验证服务器中的令牌而不是客户端中的令牌

在SPA上,与oidc相关的一切都发生在客户机代码中,包括令牌的验证

这不是客户端对令牌进行的唯一验证,也不是最重要的验证,主要的验证是使用授权机构公开的公钥对进行签名的检查

我认为任何处理日期时间的JavaScript解决方案都不可靠,所有日期时间都必须在服务器中验证


为什么信任服务器上的时钟多于客户机上的时钟,桌面应用程序呢,离线应用程序呢

问题是,如果你网站的一个用户不同步他们的时钟,它可能会漂移。你的日常用户不在乎是否有良好的技术理由保持你的时钟同步。他们不关心,而且他们可能不知道为什么它没有正确同步,那么您对此问题的建议解决方案是什么?他们也会关心使用oauth2.0或任何在上面实现的服务何时停止工作。是的,因为您是对的。或者更确切地说,制造商将移除或使其很难改变时钟。同时,我的产品不够大,不能忽视用户的抱怨,即使这是我自己的错