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
- 公开声明使用公开名称或包含唯一值的名称,如
、电子邮件
或地址
。看电话号码
- 私人声明用于您自己的上下文和价值观可能会发生冲突
角色
信息
当使用多个设备时,有几个理由在到期前撤销令牌,例如当用户更改密码、权限或管理员删除的帐户时。在这种情况下,您需要黑名单或替代机制来拒绝令牌
黑名单可以包括令牌唯一IDjti
,或者在更新用户的关键数据(密码、任务等)和currentTime-maxExpiryTime
后简单地设置一个条目(sub
-iss
)。当currentTime-maxExpiryTime>last_modified
(不再发送未过期的令牌)时,可以丢弃该条目
登记债权 以下声明名称在IANA“JSON Web令牌声明”注册表中注册,该注册表由
(发行人):标识发行JWT的委托人iss
(主题):标识作为JWT主题的主体。必须是唯一的sub
(受众):标识JWT要用于的收件人(字符串数组/uri)aud
(过期时间):标识过期时间(UTC Unix),在此时间之后,您不能再接受此令牌。它应该在发布时间之后发布exp
(不在此之前):标识UTC Unix时间,在此之前不得接受JWTnbf
(发布时间):标识发布JWT的UTC Unix时间iat
(JWT ID):为JWT提供唯一标识符jti
请参见此处的备选方案我正试图扩展第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"]
}
}