5

我是使用 JWT 和 flask-jwt 的新手,所以我运行了我在文档中找到的示例。我阅读这篇文章是为了更好地理解 JWT。

但现在我想知道我应该如何处理多个令牌?我的意思是,用户将他的凭据发布到“myserver/auth”,然后将令牌返回给客户端。当客户端发送新请求时,他应该发送令牌。

我的问题是我如何知道哪个“令牌”属于哪个用户以及“令牌”存储在哪里?

4

1 回答 1

2

JWT 由以点 (.) 分隔的三部分组成,它们是:

  • 标题
  • 有效载荷
  • 签名

因此,JWT 通常如下所示。

xxxxx.yyyyy.zzzzz

让我们根据RFC这个

标题

标头通常由两部分组成:令牌的类型,即 JWT,以及散列算法,如 HMAC SHA256 或 RSA。

{
  "alg": "HS256",
  "typ": "JWT"
}

有效载荷

令牌的第二部分是有效负载,其中包含声明。声明是关于实体(通常是用户)和其他元数据的声明。这是有趣的部分,因为在令牌中我们可以检查您属于哪个。{“用户ID”:“1234567890”,“到期日期”:“2016-05-129”}

当我们生成一个新的令牌时,我们可以指定有效负载包含的数据,这样我们就可以添加 userid 来识别用户,并添加 expire_date 来检查是否是时候请求一个新的了。

签名

要创建签名部分,您必须获取编码的标头、编码的有效负载、秘密、标头中指定的算法,并对其进行签名。签名用于验证 JWT 的发件人是它所说的那个人,并确保消息没有被更改。

服务器端

我们应该将我们的密钥保存在服务器端,因此,我们可以解密一个有效的有效载荷并检查哪个用户属于哪个用户。通过这种方式,我们可以自由地避免存储令牌,因为每个令牌都存储了足够的数据来验证我们的用户。

如何更新令牌?:从客户端

生成更新令牌的过程是相同的,因此客户端应请求更新服务(HTTP 请求,如www.myhost.com/renew)并发送旧令牌以生成新令牌。请记住,您可以检查哪个用户属于该令牌,因此更新令牌应包含相同的有效负载但具有不同的到期日期。

单点登录

我们可以将 JWT 与单点登录等更多策略一起使用,以确保同时只记录一个具有相同凭据的用户。

于 2016-05-29T16:40:19.883 回答