
1) 【一句话结论】针对校园科研管理系统多端访问的安全需求,采用OAuth 2.0 + JWT + 令牌黑名单的方案,通过中心化认证服务实现统一登录、角色授权,并保障令牌存储与传输安全。
2) 【原理/概念讲解】老师口吻,解释核心是“统一认证、分离授权”。用户登录时,前端提交凭证到认证服务,服务验证身份后生成包含角色信息的JWT(如payload包含roles数组),前端存储加密后的令牌(移动端用Android Keystore + AES-256-GCM),后续请求携带令牌到后端,后端验证令牌(检查黑名单、签名、过期时间)并从payload提取角色,根据角色过滤资源(学生仅访问课程数据,管理员可访问全部)。类比:就像校园实验室的“电子门禁卡”,先验证身份(登录),再根据卡类型(角色)进入不同区域(授权),多端设备都能使用同一张“卡”。
3) 【对比与适用场景】
4) 【示例】
/auth/login,携带用户名和密码:
{
"username": "student001",
"password": "password123"
}
认证服务验证成功后返回JWT:
{
"access_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJ1c2VyLzE2LjI0IiwiaWF0IjoxNjIzNjQwMDAwfQ.abc123",
"token_type": "Bearer",
"expires_in": 3600,
"roles": ["student", "researcher"]
}
PC端将access_token存储在LocalStorage(加密,如使用AES-256-GCM),后续请求头添加Authorization: Bearer abc123。roles字段,根据角色过滤资源(如学生请求课程数据,管理员请求全部数据)。5) 【面试口播版答案】
“面试官您好,针对校园科研管理系统的多端认证与授权,我建议采用OAuth 2.0 + JWT + 令牌黑名单的组合方案。核心思路是:用户登录时,前端提交凭证到中心化认证服务,服务验证身份后生成包含角色信息的JWT,前端存储加密后的令牌(移动端用Android Keystore + AES-256-GCM),后续所有请求携带令牌到后端,后端验证令牌(检查黑名单、签名、过期时间)并从payload提取角色,根据角色过滤资源。这样既支持PC和移动端,又确保了安全性和授权粒度。”
6) 【追问清单】
roles数组,后端根据roles字段过滤资源(如学生只能访问个人课程数据,老师可访问所有课程数据)。7) 【常见坑/雷区】