51mee - AI智能招聘平台Logo
模拟面试题目大全招聘中心会员专区

设计一个银行系统的用户认证和授权系统,前端如何实现安全的登录流程,并如何与后端配合保证会话安全?

交通银行前端开发工程师难度:中等

答案

1) 【一句话结论】:银行系统用户认证前端需通过HTTPS加密传输、安全Cookie存储Token(HttpOnly/Secure/SameSite),配合后端Redis管理会话,实现5分钟无操作自动登出及MFA后Token更新,保障会话安全。

2) 【原理/概念讲解】:
讲解关键概念,自然表达:

  • HTTPS:银行系统所有通信必须通过HTTPS,加密传输数据,防止中间人攻击,就像银行柜台的加密通道,确保用户凭证不被窃听。
  • JWT(JSON Web Token):自包含的JSON令牌,包含用户身份(如用户ID、角色)、过期时间(exp)和签名,前端存储后直接携带,后端验证签名即可确认身份,无需后端存储状态,适合微服务架构。
  • Session Token(有状态):后端生成并存储会话状态(如Redis),前端携带Token,后端验证并从存储中获取用户信息,适合传统单体应用或复杂业务逻辑。
  • CSRF防护:跨站请求伪造,攻击者诱导用户点击恶意链接,发送伪造请求。通过CSRF Token(随机字符串,每次请求携带)或SameSite=Strict的Cookie(仅同源请求有效)防止,银行系统需严格配置,类似ATM的动态验证码。
  • 银行特有会话超时:5分钟内无用户操作自动登出,前端定时检测用户活动(鼠标移动、点击或触摸事件),超时则触发登出,后端清理会话状态。
  • 多因素认证(MFA)后Token更新:用户完成MFA(如短信验证码)后,后端生成新的JWT(含MFA标识)和Refresh Token,前端更新Token,确保授权安全。

3) 【对比与适用场景】:

特性JWT(无状态)Session Token(有状态)
定义自包含JSON令牌,含身份、过期时间、签名后端存储的会话ID,前端携带
核心特性自包含信息,后端无需存储状态后端存储用户状态,前端验证Token
银行系统适用微服务架构、单点登录(如银行APP跨服务)传统单体应用、复杂业务逻辑(如账户转账)
注意点令牌过期后需刷新(Refresh Token)会话超时后需后端清理状态(如Redis过期)
安全性依赖签名,防止篡改;需HTTPS依赖后端存储,需防止Token泄露

4) 【示例】(伪代码展示登录及会话管理流程):

  • 登录流程:

    1. 前端:用户输入用户名/密码 → 发送POST请求(HTTPS)到后端 /api/login,参数:username, password(密码用BCrypt哈希传输,如$2b$12$...)。
    2. 后端:验证哈希值 → 成功则生成JWT({"sub":"user123","role":"bank_user","exp":1701234567890},签名用HS256,密钥存储在密钥管理服务,定期轮换)和Refresh Token(存储在Redis,与JWT关联,过期时间1周) → 返回给前端。
    3. 前端:将JWT存储在Cookie(设置HttpOnly、Secure、SameSite=Strict),Refresh Token用AES-256加密后存储在localStorage(密钥从环境变量获取)。
  • 后续请求:

    1. 前端:发送GET请求(HTTPS)到 /api/data,请求头:Authorization: Bearer <JWT>。
    2. 后端:验证JWT签名,若有效则允许访问,否则返回401。
  • 会话超时处理:

    1. 前端:启动定时器(5分钟),检测用户活动(如mousemove事件或移动端touchstart事件)。
    2. 若5分钟无活动,前端触发登出事件,清除Cookie和localStorage中的Token,跳转登录页。
  • MFA后Token更新:

    1. 用户完成MFA(如短信验证码) → 后端生成新的JWT(含MFA标识,如{"sub":"user123","role":"bank_user","mfa":"verified"})和Refresh Token → 前端更新Cookie中的JWT和localStorage中的Refresh Token。

5) 【面试口播版答案】(约90秒):
“面试官您好,关于银行系统用户认证和授权的前端实现,核心是通过安全的传输和令牌机制,配合后端管理会话,满足银行特有的安全要求。首先,必须用HTTPS加密所有通信,防止中间人窃取用户凭证。前端登录后,后端生成JWT(包含用户ID、角色和5分钟过期时间,签名用HS256),返回给前端。前端将Token存储在Cookie(设置HttpOnly、Secure、SameSite=Strict),避免被XSS攻击。后续请求携带Authorization头,后端验证签名。同时,实现5分钟无操作自动登出:前端定时检测用户活动(鼠标移动或触摸事件),超时则清除Token。对于多因素认证(MFA),用户完成验证后,后端生成新的JWT(含MFA标识),前端更新Cookie中的JWT和localStorage中的Refresh Token。若Token过期,前端调用刷新接口(/refresh)获取新Token,避免用户重新登录。这样前端无状态,后端通过Token和Redis管理会话,确保会话安全。”

6) 【追问清单】:

  • 问题1:如果用户5分钟内无操作自动登出,前端如何处理?
    回答要点:前端启动定时器,检测用户活动(如鼠标移动、点击按钮或触摸事件),超时则触发登出事件,清除Cookie和localStorage中的Token,并跳转登录页。

  • 问题2:多因素认证(MFA)后,Token如何更新?
    回答要点:MFA验证成功后,后端生成新的JWT(含MFA标识)和Refresh Token,前端更新Cookie中的JWT和localStorage中的Refresh Token,确保授权安全。

  • 问题3:Token泄露后,如何应急处理?
    回答要点:前端存储Token时用AES-256加密的localStorage,后端设置Token过期时间(如30分钟),泄露后用户可立即刷新Token或重新登录,后端清理相关会话状态。

  • 问题4:Cookie的安全设置(HttpOnly、Secure、SameSite)具体作用?
    回答要点:HttpOnly防止JavaScript访问Cookie,避免XSS攻击;Secure仅通过HTTPS传输;SameSite=Strict仅同源请求有效,防止CSRF攻击。

7) 【常见坑/雷区】:

  • 坑1:忽略会话超时,导致用户长时间未操作仍能访问敏感操作(如转账),违反银行安全规范。
  • 坑2:Token存储在localStorage且未加密,被XSS攻击窃取,导致用户账户被盗。
  • 坑3:跨域配置错误,导致前端请求后端API失败,影响业务流程。
  • 坑4:MFA后Token未正确更新,导致用户无法访问已登录的服务,影响用户体验。
  • 坑5:后端验证Token时未检查过期时间,导致过期Token仍能访问,存在安全风险。
51mee.com致力于为招聘者提供最新、最全的招聘信息。AI智能解析岗位要求,聚合全网优质机会。
产品招聘中心面经会员专区简历解析Resume API
联系我们南京浅度求索科技有限公司admin@51mee.com
联系客服
51mee客服微信二维码 - 扫码添加客服获取帮助
© 2025 南京浅度求索科技有限公司. All rights reserved.
公安备案图标苏公网安备32010602012192号苏ICP备2025178433号-1