MST

星途 面试题库

面试题:微服务架构下JWT实现安全认证的流程

请详细描述在微服务架构中,使用JWT实现安全认证的具体流程,包括用户登录、JWT的生成、传输以及服务端验证等环节。
27.2万 热度难度
后端开发微服务架构

知识考点

AI 面试

面试题答案

一键面试
  1. 用户登录
    • 用户在客户端输入用户名和密码,向认证服务器发起登录请求。
    • 认证服务器接收到请求后,根据提供的用户名和密码在数据库或其他存储中进行验证。如果用户名和密码匹配,则验证成功,否则返回错误信息。
  2. JWT的生成
    • 当用户登录验证成功后,认证服务器会生成JWT。JWT通常由三部分组成:头部(Header)、载荷(Payload)和签名(Signature)。
    • 头部:包含两部分信息,令牌的类型(如JWT)和使用的哈希算法(如HMAC SHA256或RSA)。示例:
{
  "alg": "HS256",
  "typ": "JWT"
}
- **载荷**:包含声明(claims),这些声明是关于实体(通常指用户)和其他数据的陈述。可以包含用户的基本信息(如用户名、用户ID等)、过期时间等。示例:
{
  "sub": "1234567890",
  "name": "John Doe",
  "iat": 1516239022,
  "exp": 1516239022 + 3600
}
- **签名**:为了创建签名部分,需要使用编码后的头部、编码后的载荷、一个密钥(secret)和头部中指定的签名算法。签名用于验证消息在传输过程中没有被更改,并且在使用私钥签名的情况下,还可以验证JWT的发送者的身份。示例:

HMACSHA256( base64UrlEncode(header) + "." + base64UrlEncode(payload), secret) 3. JWT的传输: - 认证服务器将生成的JWT返回给客户端。客户端通常会将JWT存储在本地,如浏览器的localStorage、sessionStorage或者HTTP-only Cookie中。 - 当客户端向微服务发起后续请求时,会在请求头(Authorization header)中带上JWT。格式通常为 Bearer <JWT>。例如: Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c 4. 服务端验证: - 微服务接收到带有JWT的请求后,首先从请求头中提取JWT。 - 然后使用与认证服务器相同的密钥(secret)和签名算法来验证JWT的签名。如果签名验证通过,说明JWT没有被篡改。 - 接着验证JWT的过期时间(exp字段),如果当前时间超过了过期时间,则JWT已过期,返回错误信息。 - 最后,从JWT的载荷中获取用户信息,如用户ID、用户名等,用于后续的业务逻辑处理,如权限验证等。如果验证过程中任何一步失败,微服务将返回未授权的错误响应(通常是HTTP 401状态码)。