
1) 【一句话结论】采用OAuth2授权码模式结合JWT作为访问令牌,通过设备绑定机制防止设备更换导致Token泄露,Token在设备端使用Keychain/KeyStore等安全存储方案,并设计Token刷新机制保证会话持续性,整体兼顾安全性与用户体验。
2) 【原理/概念讲解】
首先解释OAuth2授权码模式:用户登录时,客户端引导用户跳转到授权服务器(如Tencent OAuth2端点),用户输入账号密码后,授权服务器验证成功返回授权码(code);客户端收到code后,向授权服务器发送请求(POST /token),参数包括client_id、client_secret、code、redirect_uri、grant_type=authorization_code,交换得到访问令牌(Access Token,有效期如1小时)和刷新令牌(Refresh Token,有效期如7天)。
接着说明JWT(JSON Web Token):是一种自包含的令牌,包含用户信息(如用户ID、角色)、过期时间(exp)、签名(如HS256、RS256),客户端验证签名后即可解密获取用户信息,无需与服务器通信获取用户数据,提升API请求效率。
再讲Token刷新机制:当访问令牌过期(如用户关闭应用后重新打开),客户端从Keychain/KeyStore获取refresh_token,向授权服务器请求新访问令牌,避免用户重复登录。
然后解释设备绑定:用户首次登录时,将设备标识(如设备ID、IMEI、MAC地址)与用户账户关联,后续登录时验证设备是否匹配,防止设备更换后Token被滥用(如更换手机后Token失效,需重新授权)。
最后说明Token安全存储:移动端使用iOS的Keychain或Android的KeyStore,对Token进行加密存储,防止应用崩溃或被其他应用读取;Keychain/KeyStore支持生物识别(指纹、面容ID)解锁,进一步提升安全性。
(类比:JWT像“电子身份证”,自包含用户信息,无需每次都向服务器“查户口”;设备绑定像“绑定手机号”,防止更换手机后身份证被他人使用。)
3) 【对比与适用场景】
| 方案 | 定义 | 特性 | 使用场景 | 注意点 |
|---|---|---|---|---|
| OAuth2(授权码模式) | 第三方应用获取用户授权,交换访问令牌 | 需用户交互授权,安全,支持刷新 | 移动端、Web应用,需要用户登录授权 | 需用户点击授权,流程较长 |
| JWT | 自包含的令牌,包含用户信息和签名 | 无需与服务器通信,轻量,可跨域 | API鉴权,移动端后端交互 | 过期时间设置,签名算法选择 |
| 设备绑定 | 将用户账户与设备标识关联 | 防止设备更换导致Token泄露 | 需要用户更换设备时重新登录 | 可能影响用户体验,需平衡安全与便利 |
| Keychain/KeyStore | 移动端安全存储机制 | 加密存储,支持生物识别 | 存储敏感信息(如Token) | 需正确使用加密API,避免错误 |
4) 【示例】
鉴权流程步骤(伪代码):
https://open.tenxun.com/oauth2/authorize?client_id=xxx&response_type=code&redirect_uri=xxxcode=abc123POST /token HTTP/1.1
Host: open.tenxun.com
Content-Type: application/x-www-form-urlencoded
grant_type=authorization_code&code=abc123&redirect_uri=xxx&client_id=xxx&client_secret=xxx
{
"access_token": "eyJ...",
"token_type": "Bearer",
"expires_in": 3600,
"refresh_token": "eyJ..."
}
access_token和refresh_token存储到Keychain(iOS)或KeyStore(Android),并设置过期时间。Authorization: Bearer eyJ...access_token过期,客户端用refresh_token请求新令牌:
POST /token HTTP/1.1
Host: open.tenxun.com
Content-Type: application/x-www-form-urlencoded
grant_type=refresh_token&refresh_token=eyJ...&client_id=xxx&client_secret=xxx
access_token,客户端更新存储。5) 【面试口播版答案】
(约80秒)
“面试官您好,针对移动端用户鉴权系统,我设计的方案核心是采用OAuth2授权码模式结合JWT,搭配设备绑定和Token安全存储。首先,流程上,用户登录时通过授权码交换访问令牌,JWT用于后续API鉴权,避免重复请求用户信息。Token刷新机制是当访问令牌过期时,用刷新令牌获取新令牌,保证会话持续。设备绑定方面,首次登录时关联设备标识,防止设备更换后Token被滥用。存储上,用Keychain(iOS)或KeyStore(Android)加密保存Token,支持生物识别解锁,提升安全性。整体兼顾安全性和用户体验,比如JWT自包含,减少服务器压力,设备绑定平衡安全与便利,刷新机制避免用户重复登录。”
6) 【追问清单】
7) 【常见坑/雷区】