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

设计一个安全且高效的移动端用户鉴权系统,请说明鉴权流程(如OAuth2、JWT)、Token刷新机制、设备绑定以及Token在设备上的安全存储(如Keychain/KeyStore)。

Tencent软件开发-移动客户端开发方向难度:中等

答案

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=xxx
  • 用户授权后,授权服务器返回授权码:code=abc123
  • 客户端请求访问令牌:
    POST /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),并设置过期时间。
  • 后续API请求头: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) 【追问清单】

  • 问:Token刷新的频率如何设置?比如多久刷新一次?
    回答要点:访问令牌有效期设为1小时,刷新令牌有效期设为7天,避免频繁请求授权服务器,同时保证安全性。
  • 问:设备绑定后,用户更换设备是否需要重新注册或登录?
    回答要点:设备绑定后,若用户更换设备,系统检测到设备标识变化,要求用户重新授权或登录,防止Token泄露。
  • 问:JWT的签名算法选择,比如HS256和RS256的区别?
    回答要点:HS256用对称密钥,适合客户端和服务器共享密钥;RS256用非对称密钥,客户端验证服务器签名,推荐RS256或HS384/HS512提升安全性。
  • 问:Token存储在Keychain/KeyStore中,如何处理应用崩溃或被其他应用读取?
    回答要点:Keychain/KeyStore支持数据加密,其他应用无法直接读取,结合生物识别解锁,进一步提升安全性。
  • 问:鉴权流程中,授权码的传输是否安全?比如是否需要HTTPS?
    回答要点:授权码传输必须通过HTTPS,防止中间人攻击,确保用户授权信息不被窃取。

7) 【常见坑/雷区】

  • Token刷新频率设置不当:若刷新令牌有效期过短,用户频繁刷新;若过长,安全风险,应合理设置(访问令牌1小时,刷新令牌7天)。
  • 设备绑定后允许换设备:若设备绑定过于严格,影响用户体验,需平衡安全与便利(如允许输入验证码更换设备)。
  • JWT的过期时间设置:若过期时间过短,用户频繁登录;若过长,安全风险,通常访问令牌设为1小时,刷新令牌设为7天。
  • Token存储未加密:直接存储明文Token,导致应用崩溃后Token泄露,必须使用Keychain/KeyStore等安全存储。
  • 鉴权流程中未考虑授权码泄露:若授权码被窃取,攻击者可交换访问令牌,需确保授权码传输安全(HTTPS),且授权码有效期短(如5分钟)。
51mee.com致力于为招聘者提供最新、最全的招聘信息。AI智能解析岗位要求,聚合全网优质机会。
产品招聘中心面经会员专区简历解析Resume API
联系我们南京浅度求索科技有限公司admin@51mee.com
联系客服
51mee客服微信二维码 - 扫码添加客服获取帮助
© 2025 南京浅度求索科技有限公司. All rights reserved.
公安备案图标苏公网安备32010602012192号苏ICP备2025178433号-1