服务器时区Android

时间:2017-06-09 18:10:35

标签: android date timezone jwt jodatime

我试图为我的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();

六十秒有很大的余地。我用所有不同的日期/格式对象变体拉出我的头发。无论设备位置如何,如何获取美国东部时间的日期对象?

1 个答案:

答案 0 :(得分:0)

JWT时间戳始终是基于UTC的,因此时区不是您的问题。

客户端和服务器时钟很可能不同步。 60秒对时钟偏差的容忍度不大。其他协议使用更大的差异。例如,Kerberos允许时钟之间默认的5分钟增量。