安卓单点登录原理
- 行业动态
- 2025-04-24
- 5
安卓单点登录通过共享Token实现,用户首次认证后,系统分发凭证,各应用凭Token免密
单点登录核心原理
单点登录(Single Sign-On, SSO)允许用户在多个应用中仅需一次认证即可访问所有关联服务,安卓平台通过以下机制实现:
认证流程
- 中心化认证服务器:所有应用共享同一个认证服务器(如OAuth 2.0授权服务器)。
- 首次登录:用户在任意一个应用中输入凭证(如用户名/密码),应用将凭证发送至认证服务器。
- Token发放:认证服务器验证成功后,返回一个短期有效的Access Token(访问令牌)和长期有效的Refresh Token(刷新令牌)。
- Token共享:首个应用获取Token后,通过安全渠道(如加密SharedPreferences、账户管理器或广播)将Token同步至其他应用。
Token机制
类型 | 作用 | 有效期 | 存储位置 |
---|---|---|---|
Access Token | 用于调用API或验证身份 | 几分钟~1小时 | 内存或加密SharedPreferences |
Refresh Token | 用于续期Access Token | 长期有效 | 加密存储(如EncryptedSharedPreferences) |
本地存储与共享
- SharedPreferences:同一应用内不同进程可通过
ContentProvider
或BroadcastReceiver
共享数据。 - AccountManager:系统级账户管理,支持跨应用共享(需相同签名或权限)。
- Intent传递:通过隐式Intent在应用间传递Token(需处理安全风险)。
安全性保障
- Token加密:使用对称加密(如AES)或Android密钥库(Keystore)存储敏感数据。
- HTTPS传输:所有与认证服务器的通信必须使用HTTPS。
- 防劫持措施:对Token添加设备指纹(如IMEI、IP地址)或时间戳校验。
实现方式对比
方案 | 优点 | 缺点 |
---|---|---|
基于自定义Token | 灵活控制有效期,轻量级 | 需自行维护Token颁发与验证逻辑 |
OAuth 2.0 | 标准化协议,支持第三方授权 | 集成复杂,需处理授权码、回调等流程 |
第三方SDK(如Firebase) | 开箱即用,减少开发成本 | 依赖外部服务,可能存在隐私合规风险 |
相关问题与解答
问题1:Access Token过期后如何处理?
解答:
当Access Token过期时,应用需使用Refresh Token向认证服务器申请新的Access Token,若Refresh Token也失效,则需重新引导用户登录,流程如下:
- 检测到Access Token无效 → 触发刷新逻辑。
- 携带Refresh Token请求新Token → 更新本地缓存。
- 若刷新失败 → 跳转登录页重新认证。
问题2:如何在不同签名的应用间共享Token?
解答:
安卓系统默认禁止不同签名应用共享数据,解决方案包括:
- 通过服务器中转:将Token上传至服务器,其他应用从服务器拉取。
- 使用公共存储空间:如SD卡(需用户授权)或ContentProvider(需声明相同权限)。
- JWT(JSON Web Token):将用户信息和Token编码为自包含的JWT,通过Intent或剪贴板传递(需配合加密)。