MST
星途 面试题库

面试题:安全认证之JWT在用户权限管理系统中的基础应用

请阐述JWT(JSON Web Token)的基本组成结构,以及在基于JWT的用户权限管理系统中,如何通过JWT实现用户身份验证和简单的权限判断。
14.0万 热度难度
后端开发安全认证

知识考点

AI 面试

面试题答案

一键面试

JWT基本组成结构

  1. Header(头部)
    • 内容:通常由两部分组成,令牌的类型(如JWT)和所使用的签名算法,例如 { "alg": "HS256", "typ": "JWT" }
    • 编码:经过Base64Url编码后成为JWT的第一部分。
  2. Payload(负载)
    • 内容:包含声明(claims),这些声明是关于实体(通常指用户)和其他数据的陈述。有三种类型的声明:注册声明(如iss,exp,sub等)、公共声明和私有声明。例如 { "sub": "1234567890", "name": "John Doe", "iat": 1516239022 }
    • 编码:同样经过Base64Url编码后成为JWT的第二部分。
  3. Signature(签名)
    • 生成:要创建签名部分,需要使用编码后的头部、编码后的负载、一个密钥(secret)和头部中指定的签名算法。例如,如果使用HMAC SHA256算法,签名会按如下方式创建:HMACSHA256( base64UrlEncode(header) + "." + base64UrlEncode(payload), secret)
    • 作用:用于验证消息在传输过程中没有被更改,并且在使用私钥签名的情况下,还可以验证JWT的发送者身份。

通过JWT实现用户身份验证和简单权限判断

  1. 用户身份验证
    • 登录流程:用户在客户端输入用户名和密码,发送到服务器端进行验证。如果服务器验证通过,会生成一个JWT,其中Payload部分会包含用户的标识信息(如用户ID等)。
    • 验证流程:客户端收到JWT后,在后续的请求中,会将JWT放在请求头(如Authorization: Bearer <token>)中发送给服务器。服务器接收到请求后,会从请求头中提取JWT,使用相同的密钥和签名算法对JWT的Signature进行验证。如果验证通过,说明JWT是由合法服务器生成且未被篡改,从而确认用户身份。
  2. 简单权限判断
    • 权限信息存储:在生成JWT时,可以在Payload部分添加用户的权限信息,例如 { "sub": "1234567890", "name": "John Doe", "iat": 1516239022, "permissions": ["read:article", "write:article"] }
    • 权限判断流程:当服务器接收到需要权限验证的请求时,解析JWT获取其中的权限信息。然后根据请求的操作(如访问某个API接口),判断用户是否具备相应的权限。例如,如果请求是读取文章,服务器会检查JWT中permissions字段是否包含read:article权限,如果包含则允许访问,否则拒绝访问。