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

课程预约API需要验证用户身份和权限,请设计一个安全的API认证和授权方案,结合OAuth2.0或JWT。

好未来安全攻防难度:中等

答案

1) 【一句话结论】针对课程预约API,采用OAuth2.0授权码模式结合JWT令牌的方案,通过授权服务器颁发安全令牌,资源服务器验证令牌并动态控制权限,同时实现令牌撤销、泄露应对等安全机制。

2) 【原理/概念讲解】老师口吻,先讲OAuth2.0授权码模式是用户授权的流程框架:用户登录时,客户端(课程预约App)跳转到授权服务器(如公司内部认证系统),用户同意授权后,授权服务器返回授权码(临时凭证);客户端用授权码、客户端密钥向授权服务器交换访问令牌(长期凭证,用于API调用)。JWT是自包含的令牌,包含用户ID、角色(如student/teacher)、过期时间等声明,API服务器验证JWT的签名(确保由授权服务器签发)和过期时间(防止过期令牌被滥用)。授权服务器与资源服务器的角色:授权服务器负责颁发令牌、管理用户授权状态;资源服务器负责验证令牌有效性并控制访问。令牌撤销机制:当用户注销时,授权服务器将相关访问令牌加入黑名单(令牌撤销列表),资源服务器在验证令牌时检查黑名单,若存在则拒绝访问。动态权限管理:JWT中包含用户角色,但API服务器需结合业务逻辑(如特定课程仅教师可预约)动态判断权限,避免仅依赖角色。令牌泄露应对:若令牌被窃取,立即失效(通过黑名单),用户需重新登录,并通知用户安全风险。令牌存储安全:客户端用secure HTTP-only cookie存储令牌(防止XSS窃取),或加密localStorage(移动端);服务器端存储客户端密钥(如K8s Secret),确保密钥安全。令牌过期时间设计:根据业务场景权衡,高频操作(如频繁预约)的用户设短过期时间(如1小时),低频操作的用户设长(如2小时),平衡安全与体验。

3) 【对比与适用场景】

特性OAuth2.0(授权码模式)JWT(用于API授权)
定义授权框架,用于第三方应用获取用户授权自包含的令牌,包含身份、权限等声明
核心流程客户端→授权服务器(授权码交换访问令牌)API服务器直接验证令牌(签名、过期、声明)
服务器端维护客户端密钥、用户授权状态、令牌刷新机制验证签名密钥、过期时间、声明有效性
使用场景移动App、网页等第三方客户端访问用户资源(如课程预约)API内部调用或客户端直接调用受保护API(如预约接口)
注意点防止授权码泄露,令牌刷新机制签名密钥安全,令牌存储(客户端/服务器)

4) 【示例】
伪代码示例(用户登录与API调用流程):

  • 用户登录流程:
    1. 客户端(课程预约App)发送用户名密码到授权服务器,获取授权码(如code=abc123)。
    2. 授权服务器返回授权码。
    3. 客户端用授权码、客户端ID、客户端密钥向授权服务器交换访问令牌(如token=xyz789)。
    4. 授权服务器返回访问令牌和刷新令牌(可选)。
  • 令牌撤销流程(用户注销):
    1. 用户在App中注销,客户端向授权服务器发送注销请求(携带访问令牌)。
    2. 授权服务器将访问令牌加入黑名单(令牌撤销列表)。
  • API调用流程:
    1. 客户端调用预约API(如/api/v1/book),携带访问令牌(Authorization: Bearer xyz789)。
    2. API服务器验证令牌的签名(密钥匹配)和过期时间(未过期),从令牌中提取用户ID和角色(如student)。
    3. API服务器根据角色和业务逻辑动态判断权限(如student有预约权限,教师可管理课程),返回预约结果。
    4. 若令牌过期,客户端用刷新令牌请求新访问令牌,再调用API。

5) 【面试口播版答案】
面试官您好,针对课程预约API的认证授权,我建议采用OAuth2.0授权码模式结合JWT令牌的方案。用户登录时,客户端通过授权服务器获取授权码,交换为访问令牌;API调用时,验证JWT的签名和有效性,同时结合令牌撤销机制(用户注销后令牌失效)、动态权限控制(如教师角色可管理课程,学生只能预约)和泄露应对(令牌被窃取后立即失效),确保用户身份和权限的安全。具体流程是:用户登录后,客户端获取授权码,换访问令牌,调用预约API时携带令牌,服务器验证后返回结果,令牌过期前可刷新,避免频繁登录。

6) 【追问清单】

  • 问:如何实现令牌撤销?答:用户注销时,授权服务器将访问令牌加入黑名单,资源服务器验证令牌时检查黑名单,若存在则拒绝访问。
  • 问:动态权限如何处理?答:结合RBAC,API服务器根据用户角色和业务逻辑(如特定课程仅教师可预约)动态判断权限。
  • 问:令牌泄露后如何应对?答:立即失效(通过黑名单),用户需重新登录,并通知安全风险。
  • 问:令牌存储安全吗?答:客户端用secure HTTP-only cookie(防止XSS),服务器端存储密钥在安全环境(如K8s Secret)。
  • 问:令牌过期时间如何设计?答:高频操作用户设短(如1小时),低频设长(如2小时),平衡安全与体验。

7) 【常见坑/雷区】

  • 坑1:未实现令牌撤销机制,导致用户注销后仍能访问。答:必须加入黑名单,否则安全风险。
  • 坑2:权限仅依赖角色,未考虑动态业务逻辑。答:需结合业务场景(如课程权限)动态判断。
  • 坑3:令牌存储不安全(未用secure cookie),导致XSS攻击。答:必须使用secure HTTP-only cookie或加密存储。
  • 坑4:令牌过期时间设置不合理(如过短),影响用户体验。答:需根据业务频率调整,高频短,低频长。
  • 坑5:未区分授权服务器与资源服务器角色,导致流程混乱。答:授权服务器负责颁发令牌,资源服务器负责验证,角色边界清晰。
51mee.com致力于为招聘者提供最新、最全的招聘信息。AI智能解析岗位要求,聚合全网优质机会。
产品招聘中心面经会员专区简历解析Resume API
联系我们南京浅度求索科技有限公司admin@51mee.com
联系客服
51mee客服微信二维码 - 扫码添加客服获取帮助
© 2025 南京浅度求索科技有限公司. All rights reserved.
公安备案图标苏公网安备32010602012192号苏ICP备2025178433号-1