跳到主要内容

用户认证

提示
  • 盘古 OS 的设计仍在逐步改进与完善中,本文将随时发生变化,感兴趣的朋友们可以时刻保持关注;
  • 在下方的版权声明中有本文作者的联系方式,有不同意见和相关建议的朋友可以与其保持联系;
  • 也可在本文底部的评论区登录 Github 后,直接发表您的观点;
版权声明

本文探讨的是应用系统中的用户认证设计,并非操作系统本身的用户认证机制。

系统设计要点

  • 由统一的应用客户端实现对应用的 UI 渲染和状态管理,类似 Web 浏览器的能力
    • 统一管理用户个人信息,并自动附加到应用的状态管理数据中,以融合到各个应用的 UI 中
    • 应用不能强制获取和保存用户个人信息,用户个人信息仅保存在本地客户端中
    • 应用所必须的用户信息,必须明确声明,并获得用户许可,否则,客户端将提供伪数据
  • 应用客户端支持多用户,并以本地账密方式进行用户认证,同时管理各个用户的应用密钥
    • 单用户模式也通过密码机制防止被他人操作
  • 应用与客户端之间采用密钥对实现无账密访问和安全连接
    • 双方通过密钥对(公钥、私钥)能够解密交互数据,则视为认证成功
    • 消除帐号和密码
    • 消除认证 Token 或 Session

客户端认证

  • 类似本地操作系统的用户登录和注销机制
  • 客户端的服务为系统的非用户帐号运行,系统用户仅能访问其服务,不能直接查看和操作其数据
  • 通过用户密码的长度、复杂度等信息,在本地认证密钥中加入随机字符后,再将其加密, 从而降低被逆向破解的风险
  • 加密后的客户端数据可以同步至公共的外部服务中,从而确保用户数据的安全性
用户用户客户端客户端应用服务端应用服务端添加帐号[001]点击帐号新增按钮[002]显示新增窗口[003]填写用户信息(含帐号+密码)[004]提交[005]生成本地认证密钥:用于加密用户和应用数据[006]使用密钥加密并保存用户信息[007]使用帐号+密码加密并保存本地认证密钥[008]提示创建成功,需重新登录登录[009]点击登录按钮[010]显示登录窗口[011]输入帐号+密码[012]提交[013]本地验证用户:通过帐号+密码能否解密本地认证密钥alt[认证失败][014]提示认证失败[015]显示用户注册的应用列表:先对数据解密锁定[016]点击锁定[017]隐藏已开启的应用(后台运行)[018]显示用户锁定窗口(含密码输入和用户切换按钮)退出[019]点击退出[020]关闭已开启的应用[021]显示待登录窗口(仅含登录按钮)

应用注册

  • 应用与用户之间为一对一关系,不同的应用均有唯一的用户认证密钥
  • 客/服两端的连接信道通过服务端的私钥和公钥加密或解密
    • 私钥严格保存在服务侧
    • 公钥公开给任意客户端
用户用户客户端客户端应用服务端应用服务端[001]选择待注册的应用:支持直接录入应用地址,或者扫描二维码等方式[002]从应用链接中分析得到应用连接公钥[003]通过应用公钥加密连接信道:非长连接信道,只是表示客/服两端的往返数据均需加密[004]发起注册申请[005]返回用户需提供的个人信息[006]显示应用需获取的个人信息,等待用户确认[007]确认应用可获取的信息:不允许获取的,则由客户端生成伪数据[008]为应用生成用户认证密钥:私钥+公钥[009]提交用户个人信息,以及用户认证公钥[010]保存用户的个人信息和用户认证公钥[011]生成并记录用户唯一标识:非记录 ID 的随机字符串,业务数据与其记录 ID 关联[012]通过用户认证公钥加密注册信息(含用户唯一标识)[013]返回加密后的注册信息[014]连接结束[015]通过应用的用户认证私钥解密注册信息[016]使用用户的本地认证密钥加密保存应用注册信息(含应用公钥、用户唯一标识等)[017]注册成功

应用访问

  • 应用需要验证用户的合法性,以确保查看和操作是由数据所有者发出, 故而,仅需对请求数据加密,无需再加密响应数据
    • 若无请求数据,则需提供对某个随机或固定字符串的加密结果, 服务端通过能否解密请求数据来判定用户是否合法
用户用户客户端客户端应用服务端应用服务端[001]操作客户端渲染的应用 UI,触发服务端请求[002]使用应用的用户认证私钥加密请求数据[003]通过应用公钥加密连接信道[004]发送请求,并附带:用户唯一标识+加密后的请求数据[005]根据用户唯一标识找到用户认证公钥:若无公钥,则视为无效用户[006]通过用户认证公钥解密请求数据:若无法解密,则视为非法请求[007]处理对应的用户数据[008]返回处理结果:已经为加密信道,无需再对响应数据加密[009]连接结束[010]整合返回结果,在 UI 中渲染[011]显示操作结果