flask-jwt如何处理令牌?

时间:2015-10-11 16:55:15

标签: python flask jwt flask-jwt

我是新手使用JWT和flask-jwt所以我运行了example我在docs中找到的地方。我读了this以更好地了解JWT。

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

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

1 个答案:

答案 0 :(得分:2)

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

  • 标题
  • 有效载荷
  • 签名

因此,JWT通常如下所示。

xxxxx.yyyyy.zzzzz

让我们根据RFCthis

查看摘要

标题

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

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

有效载荷

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

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

签名

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

服务器端

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

如何更新令牌?:来自客户端

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

单点登录

我们可以使用更多策略(如single sign-on)来使用JWT,以确保同时只记录一个具有相同凭据的用户。

相关问题