服务器时区的 JWT setExpiration Android
JWT setExpiration for servers time zone Android
我正在尝试为我的 JWT 网络令牌设置一个较短的到期时间。我 运行 遇到的问题是客户端是否位于服务器 (EST) 的不同时区。目前工作代码如下
Map<String, Object> header = new HashMap<>();
header.put("typ", Header.JWT_TYPE);
long now = Instant.now().getMillis();
String compactJws = Jwts.builder()
.setHeader(header)
.claim("email", email)
.claim("password", password)
.claim("reg_id", reg_id)
.claim("deviceId", deviceId)
.claim("gsf", returnGSF())
.claim("imei", returnIMEI())
.claim("serial", Build.SERIAL)
.claim("version", String.valueOf(version))
.claim("language", language)
.setIssuedAt(new Date(now))
.setExpiration(new Date(now + 60000))
.signWith(SignatureAlgorithm.HS256, settings.getString("keychain", "password"))
.compact();
六十秒有足够的回旋余地。我正在用所有不同的 Date/Format 对象变体来拉扯我的头发。如何获取美国东部时间的日期对象而不考虑设备位置?
JWT 时间戳始终基于 UTC,因此时区不是您的问题。
很可能客户端和服务器时钟不同步。 60 秒对时钟偏移的容忍度不大。其他协议使用更大的方差。例如,Kerberos 允许时钟之间有 5 分钟的默认增量。
我正在尝试为我的 JWT 网络令牌设置一个较短的到期时间。我 运行 遇到的问题是客户端是否位于服务器 (EST) 的不同时区。目前工作代码如下
Map<String, Object> header = new HashMap<>();
header.put("typ", Header.JWT_TYPE);
long now = Instant.now().getMillis();
String compactJws = Jwts.builder()
.setHeader(header)
.claim("email", email)
.claim("password", password)
.claim("reg_id", reg_id)
.claim("deviceId", deviceId)
.claim("gsf", returnGSF())
.claim("imei", returnIMEI())
.claim("serial", Build.SERIAL)
.claim("version", String.valueOf(version))
.claim("language", language)
.setIssuedAt(new Date(now))
.setExpiration(new Date(now + 60000))
.signWith(SignatureAlgorithm.HS256, settings.getString("keychain", "password"))
.compact();
六十秒有足够的回旋余地。我正在用所有不同的 Date/Format 对象变体来拉扯我的头发。如何获取美国东部时间的日期对象而不考虑设备位置?
JWT 时间戳始终基于 UTC,因此时区不是您的问题。
很可能客户端和服务器时钟不同步。 60 秒对时钟偏移的容忍度不大。其他协议使用更大的方差。例如,Kerberos 允许时钟之间有 5 分钟的默认增量。