few things on best practice. :
{
sub: "userid",
permission: {
profile: "read:write",
resource1: "read",
resource2: "write",
service1: "read"
}
}
The JWT token should always be short lived, so make sure exp is always set, or else you can't really revoke them.
The claim should be self evident, ie. whole point of the JWT is so that each service don't have to check a centralized place like redis.