Session 在JWT中存储什么?

Session 在JWT中存储什么?,session,cookies,jwt,Session,Cookies,Jwt,你们如何在多台设备上处理同一用户?像{admin:true}这样的数据除了更改它的设备之外不会变得陈旧吗 这应该在JWT中吗?如果不是,并且我们只需要输入用户ID,那会不会像基于cookie的会话一样,因为我们将状态存储在服务器上?JWT建立了三类声明: 已登记的权利要求如sub,iss,exp或nbf 公开声明使用公开名称或包含唯一值的名称,如电子邮件、地址或电话号码。看 私人声明用于您自己的上下文和价值观可能会发生冲突 这些索赔都不是强制性的 JWT是自包含的,应该避免使用提供必要

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

这应该在JWT中吗?如果不是,并且我们只需要输入用户ID,那会不会像基于cookie的会话一样,因为我们将状态存储在服务器上?

JWT建立了三类声明:

  • 已登记的权利要求
    sub
    iss
    exp
    nbf

  • 公开声明使用公开名称或包含唯一值的名称,如
    电子邮件
    地址
    电话号码
    。看

  • 私人声明用于您自己的上下文和价值观可能会发生冲突

这些索赔都不是强制性的

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

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

黑名单可以包括令牌唯一ID
jti
,或者在更新用户的关键数据(密码、任务等)和
currentTime-maxExpiryTime
后简单地设置一个条目(
sub
-
iss
)。当
currentTime-maxExpiryTime>last_modified
(不再发送未过期的令牌)时,可以丢弃该条目


登记债权 以下声明名称在IANA“JSON Web令牌声明”注册表中注册,该注册表由

  • iss
    (发行人):标识发行JWT的委托人
  • sub
    (主题):标识作为JWT主题的主体。必须是唯一的
  • aud
    (受众):标识JWT要用于的收件人(字符串数组/uri)
  • exp
    (过期时间):标识过期时间(UTC Unix),在此时间之后,您不能再接受此令牌。它应该在发布时间之后发布
  • nbf
    (不在此之前):标识UTC Unix时间,在此之前不得接受JWT
  • iat
    (发布时间):标识发布JWT的UTC Unix时间
  • jti
    (JWT ID):为JWT提供唯一标识符
例子
请参见此处的备选方案

我正试图扩展第2部分:在公开声明中加入什么内容。我不认为
电子邮件
地址
是很好的例子,因为它们应该是可配置的,并且不会将令牌列入黑名单,因此用户不必从其他设备再次登录。但是,诸如
admin
scopes
之类的属性将是您的黑名单方法的良好候选。我只是在寻找可以添加到令牌中的其他属性。此外,您必须记住,它应该尽可能短,因为它主要用于web上下文。请查看此链接以获取实际的索赔注册。要建立一个黑名单,您需要在
jti
中为令牌使用一个唯一的ID,或者在
sub
中包含一个用户ID。还可以使用
iss
控制如何仅撤销旧令牌,列出一些我认为目前有用的属性:
userID
lastActive
<如果您有一个黑名单功能,可以撤销所有用户密钥,那么代码>范围
将非常有用
{
    "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"]
    }
}