flask-jwt如何处理令牌?

Ric*_*rdo 5 python flask jwt flask-jwt

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

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

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

Ric*_*rdo 2

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

\n
    \n
  • 标头
  • \n
  • 有效载荷
  • \n
  • 签名
  • \n
\n

因此,JWT 通常如下所示。

\n
xxxxx.yyyyy.zzzzz\n
Run Code Online (Sandbox Code Playgroud)\n

让我们看一下根据RFCthis 的简短摘要

\n

标头

\n

标头通常由两部分组成:令牌的类型(JWT)和哈希算法(例如 HMAC SHA256 或 RSA)。

\n
{\n  "alg": "HS256",\n  "typ": "JWT"\n}\n
Run Code Online (Sandbox Code Playgroud)\n

有效载荷

\n

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

\n

当我们生成新令牌时,我们可以指定有效负载包含的数据,以便我们可以添加 userid 来标识用户,并添加点到期日期来检查是否是时候请求新的令牌。

\n

签名

\n

要创建签名部分,您必须获取编码的标头、编码的有效负载、秘密、标头中指定的算法,然后对其进行签名。\n签名用于验证 JWT 的发送者是否是其所说的人并确保消息被\xe2\x80\x99t改变。

\n

服务器端

\n

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

\n

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

\n

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

\n

单点登录

\n

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

\n

  • 您实际上只是从“https://jwt.io/introduction/”逐字复制,并没有通过链接回溯给原始作者。BOO 盗窃知识产权。嘘嘘。 (4认同)