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