面试题答案
一键面试用户身份验证和权限控制基本流程
- 用户登录:用户在客户端输入用户名和密码,发送登录请求到认证服务器。
- 认证:认证服务器验证用户名和密码。若正确,根据用户信息生成包含用户身份及权限信息的JWT。
- 返回JWT:认证服务器将生成的JWT返回给客户端。
- 客户端存储JWT:客户端收到JWT后,通常存储在本地(如localStorage、sessionStorage或cookie)。
- API请求:客户端在后续请求API时,将JWT放在请求头(如Authorization: Bearer )中发送给API网关。
- 网关验证JWT:API网关接收到请求,提取JWT并验证其有效性(如签名验证、过期时间检查)。若无效,返回未授权错误。
- 权限检查:若JWT有效,API网关从JWT中提取权限信息,检查用户是否有权限访问请求的资源。若有权限,将请求转发到后端服务;否则返回权限不足错误。
JWT结构组成及作用
JWT由三部分组成,通过点(.)分隔:Header(头部)、Payload(负载)、Signature(签名)。
- Header(头部):
- 作用:包含两部分信息,一是令牌的类型,通常为JWT;二是使用的签名算法,如HMAC SHA256或RSA。这部分告知接收者如何验证签名。
- 示例:{"alg": "HS256", "typ": "JWT"}
- Payload(负载):
- 作用:存放用户相关的声明(claims)信息,这些信息可以是用户身份信息、权限信息等。分为注册声明(如iss、exp等)、公共声明和私有声明。
- 示例:{"sub": "1234567890", "name": "John Doe", "iat": 1516239022}
- Signature(签名):
-
作用:用于验证消息在传输过程中有没有被更改,并且,在使用私钥签名的情况下,还可以验证JWT的发送者身份。
-
生成方式:需要使用编码后的Header、编码后的Payload、一个密钥(secret)和Header中指定的签名算法来生成。
-