面试题答案
一键面试基本流程
- 用户登录:用户在客户端输入用户名和密码,向服务端发起登录请求。
- 验证用户信息:服务端接收到登录请求后,验证用户名和密码是否正确。如果正确,进入下一步。
- 生成JWT:服务端根据验证通过的用户信息,生成JWT。JWT包含用户相关的身份信息等。
- 返回JWT:服务端将生成的JWT返回给客户端。
- 客户端存储JWT:客户端将JWT存储起来,比如存储在本地缓存或者Cookie中。
- 后续请求携带JWT:客户端在后续向Serverless架构中的服务发起请求时,将JWT放在请求头(如
Authorization: Bearer <JWT>
)或者其他合适位置发送给服务端。 - 服务端验证JWT:Serverless服务接收到请求后,从请求中提取JWT,并验证JWT的有效性,包括验证签名、检查过期时间等。如果JWT有效,服务端处理请求;如果无效,返回错误响应。
JWT主要组成部分及作用
- Header(头部)
- 作用:包含两部分信息,一是令牌的类型,通常为JWT;二是使用的签名算法,如HMAC SHA256或RSA等。这部分信息告诉Serverless服务如何验证JWT的签名。在验证JWT时,服务端首先从Header中获取签名算法,然后使用相应算法对JWT进行验证。
- Payload(负载)
- 作用:存放实际需要传递的用户相关的数据,例如用户ID、用户名、用户角色等信息。这些信息可用于Serverless服务在验证JWT通过后,根据Payload中的内容进行权限判断等操作,决定是否允许用户访问特定资源。Payload中的数据不是加密的,所以不要存放敏感信息,如密码等。
- Signature(签名)
- 作用:用于验证JWT在传输过程中没有被篡改。服务端使用Header中指定的签名算法,结合服务端的密钥,对Header和Payload进行签名计算,将计算结果与接收到的JWT中的Signature进行对比。如果一致,说明JWT是可信的,没有被篡改;如果不一致,则说明JWT可能被篡改或伪造,服务端拒绝该请求。