如何检查jwt令牌剩余有效时间golang

时间:2016-08-24 09:50:54

标签: go jwt express-jwt

我正在使用

设置jwt令牌声明的到期时间
claims["exp"] = time.Now().Add(time.Hour * time.Duration(settings.Get().JWTExpiration)).Unix()

其中settings.Get()。JWTExpiration为我提供了我在应用程序设置文件中所做的设置。

我写了一个函数,理想情况下应该给我令牌有效的剩余时间。

func getTokenRemainingValidity(timestamp interface{}) int {
    if validity, ok := timestamp.(float64); ok {
        tm := time.Unix(int64(validity), 0)
        remainder := tm.Sub(time.Now())
        if remainder > 0 {
            return int(remainder.Seconds() + expireOffset)
        }
    }
    return expireOffset
}

我调用这个函数,如:

x := getTokenRemainingValidity(claims["exp"])
fmt.Println(x)

声明[" exp"]是解析jwt令牌后我得到的声明。 但这总是给我相同的输出。即3600。如何检查令牌的剩余有效性。我正在使用golang。

1 个答案:

答案 0 :(得分:0)

由于类型断言expireOffset失败,因为timestamp.(float64)的实际值为timestamp,所以您总是得到3600(似乎是int64)。

func getTokenRemainingValidity(timestamp interface{}) int {
    var expireOffset = 3600
    if validity, ok := timestamp.(int64); ok {
        tm := time.Unix(int64(validity), 0)
        remainder := tm.Sub(time.Now())

        if remainder > 0 {
            return int(remainder.Seconds() + float64(expireOffset))
        }
    }
    return expireOffset
}

为使其正常工作,我添加了expireOffset并将其设置为3600。 在第一个return语句中,必须将expireOffset转换为float64,然后将结果转换回int。 通过这种方式,尽管我不确定您要添加或返回的偏移量。

可以查看并测试完整的示例here on the Go Playground