JWT(Json Web Token)中默认的声明含义

12 min read

按照JWT协议的说法,默认的声明是可选的,目前是为了提供参考、增加payload效能,同时为各语言的实现提供参考。

iss(Issuer)

jwt的颁发者,其值应为大小写敏感的字符串或Uri。

e.g.

{
    "iss": "llbetter.com"
}

aud(Audience)

jwt的适用对象,其值应为大小写敏感的字符串或Uri。一般可以为特定的App、服务或模块。

比如我们颁发了一个jwt给一个叫”JsonWebToken”的app使用,sub可以是这个app的包签名或者标识。

服务器端的安全策略在签发时和验证时,aud必须是一致的。

e.g.

{
    "iss": "llbetter.com",
    "aud": "com.llbetter.JsonWebToken"
}

sub(Subject)

jwt的所有者,可以是用户ID、唯一标识。

e.g.

{
    "iss": "llbetter.com",
    "aud": "com.llbetter.JsonWebToken",
    "sub": "10000" // user id
}

exp(Expiration Time)

jwt的过期时间,必须是可以解析为时间/时间戳的数字类型。服务器端在验证当前时间大于过期时间时,应当验证不予通过。

e.g.

{
    "iss": "llbetter.com",
    "aud": "com.llbetter.JsonWebToken",
    "sub": "10000", // user id
    "exp": 1516239022
}

nbf(Not Before)

表示jwt在这个时间后启用。同exp一样,需为可以解析成时间的数字类型。

e.g.

{
    "iss": "llbetter.com",
    "aud": "com.llbetter.JsonWebToken",
    "sub": "10000", // user id
    "exp": 151239022,
    "nbf": 151139022
}

iat(Issued At)

jwt的签发时间。同exp一样,需为可以解析成时间的数字类型。

e.g.

{
    "iss": "llbetter.com",
    "aud": "com.llbetter.JsonWebToken",
    "sub": "10000", // user id
    "exp": 151239022,
    "nbf": 151139022,
    "iat": 151039022
}

jti(JWT ID)

签发jwt时给予当前token的唯一ID,通常用于一次性消费的token。

e.g.

{
    "iss": "llbetter.com",
    "aud": "com.llbetter.JsonWebToken",
    "sub": "10000", // user id
    "exp": 151239022,
    "nbf": 151139022,
    "iat": 151039022,
    "jti": "550e8400-e29b-41d4-a716-446655440000"
}