Code前端首页关于Code前端联系我们

Flask JWT 教程:Jwt 字符串组合

terry 2年前 (2023-09-24) 阅读数 71 #后端开发

以下是 JWT 的一些使用场景:

1。授权:这是JWT最常见的使用场景。用户一旦登录,后续的所有请求都必须携带JWT,这样用户就可以携带令牌访问所有的路由、服务器和资源。单点登录是目前最常见的场景,因为它开销较低,并且可以轻松实现跨域访问。

2。信息交换:JWT令牌是实现不同客户端上安全数据交互的一个很好的方式。由于 JWT 可以进行签名(即使用公钥/私钥对加密),因此您可以确定发送消息的人就是我们期望的人。此外,由于签名是根据有效负载中的标头计算的,因此还可以验证内容是否已被更改。

JWT 组成

JWT 是由三条信息组成的字符串。这三条信息用.连接起来形成一个Jwt字符串。它们是

  • Header
  • Payload
  • Signature

就像这样:

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJuYW1lIjoiXHU2YjYzXHU1ZmMzXHU1MTY4XHU2ODA4XHU3ZjE2XHU3YTBiIiwiYWRtaW4iOnRydWV9.Y1H8vDimuq_FHZ7UDOLozAJNLoPTack-ubsxCEDDgBc

第一部分是 header:

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9

第二部分是 Payload: :

Y1H8vDimuq_FHZ7UDOLozAJNLoPTack-ubsxCEDDgBc

Header

标头通常由两部分组成:令牌的类型(即 JWT)和使用的签名算法(例如 HMAC、SHA256 或 RSA)。

例如:

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

jwt的头部携带两条信息:

  • type字段是声明的类型,这里jwt
  • alg字段是加密算法,通常使用HM25ACBase64编码的作用是第一部分来自

    有效负载

    有效负载是存储有效信息的地方。该有效信息包含三部分:注册声明(Registered Claims)、公开声明(Public Claims)和私人声明(Private Claims)

    1。注册声明:这是一组非强制但推荐的预定义声明。他们提供各种易于使用和共享的语句。其中有iss(发行人发行人)、exp(有效期)、sub(主题)、audi(audience受众)等。

    2。公共声明:使用 JWT 的人可以随意定义这些声明。但为了避免冲突,它们应该在 Internet JWT 注册表中定义,或者可以定义为包含防冲突名称的 URI。

    3。私人声明:这些声明的目的是在同意使用这些声明的各方之间共享信息,既不是注册声明,也不是公开声明。

    定义有效负载:

    payload = {    "name": "正心全栈编程",    "admin": True}

    以 Base64 对其进行编码以获取 JWT 的第二部分。

    签名

    要创建签名部分,必须首先获取标头中指定的 header、payload、secret(秘密密钥)、算法(alh),然后进行签名。

    例如,如果要使用HMAC SHA256算法创建签名如下:

    HMACSHA256(  base64UrlEncode(header) + "." +  base64UrlEncode(payload),  secret)

    JWT的第三部分是签证信息。该签证信息由三部分组成:

    • Header(无base64)
    • payload(无base64)
    • secret

    这部分需要base64加密的header和base64加密的payload。使用.中的字符串进行连接,然后使用标头中声明的加密方法。进行saltsecret组合加密,然后形成jwt的第三部分。

    将这三个部分用.连接起来形成一个完整的字符串,从而形成最终的jwt。

    注:生成的JWT token可以验证https://jwt.io/#debugger-io

版权声明

本文仅代表作者观点,不代表Code前端网立场。
本文系作者Code前端网发表,如需转载,请注明页面地址。

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

热门