在JWT中存储什么?

use*_*937 11 cookies session jwt

你们如何在多个设备上处理同一个用户?{admin: true}除了改变它的设备之外,数据不会变得陈旧吗?

这甚至应该在JWT吗?如果没有,我们只使用用户ID,那就不像是基于cookie的会话,因为我们将状态存储在服务器上?

ped*_*ofb 10

JWT RFC坚持要求的类别:

  • 注册权利要求喜欢sub,iss,expnbf

  • IANA注册的公共名称或名称的公开声明,其中包含的值应该是唯一的email,address或者phone_number.查看完整列表

  • 在您自己的上下文和值中使用的私有声明可能会发生冲突

这些索赔都不是强制性的

JWT是自包含的,应避免使用提供必要数据的服务器会话来执行身份验证(不需要服务器存储和数据库访问).因此,role信息可以包含在JWT中.

使用多个设备时,有几个原因可以在到期前撤消令牌,例如当用户更改管理员删除的密码,权限或帐户时.在这种情况下,您需要一个黑名单或替代机制来拒绝令牌

黑名单可以包括令牌唯一ID,jti或者只是在更新用户关键数据(密码,持久性等)之后设置条目(sub- iss)currentTime - maxExpiryTime < last iss.当currentTime - maxExpiryTime > last_modified(不再发送未过期的令牌)时,可以丢弃该条目.


注册索赔

以下声明名称在10.1节建立的IANA"JSON Web令牌声明"注册表中注册.

  • iss (发行人):确定发行JWT的委托人.
  • sub(主题):确定作为JWT主题的委托人.必须是独特的
  • aud (观众):识别JWT的目标收件人(字符串数组/ uri)
  • exp(到期时间):标识到期时间(UTC Unix),之后您必须不再接受此令牌.它应该在发布之后.
  • nbf(不是之前):标识不允许接受JWT的UTC Unix时间
  • iat (发布于):标识发布JWT的UTC Unix时间
  • jti (JWT ID):为JWT提供唯一标识符.

{
    "iss": "stackoverflow",
    "sub": "joe",
    "aud": ["all"],
    "iat": 1300819370,
    "exp": 1300819380,
    "jti": "3F2504E0-4F89-11D3-9A0C-0305E82C3301"
    "context": {
        "user": {
            "key": "joe",
            "displayName": "Joe Smith"
        },
        "roles":["admin","finaluser"]
    }
}
Run Code Online (Sandbox Code Playgroud)

请参阅/sf/answers/2626408781/