39.App中用户验证方案

2023-05-16

注:这篇文章为15.app后端怎么设计用户登录方案的修改版,以前的这篇博客写得太简单了,弄得很多同学理解不了,趁着写书《App后台开发运维和架构实践》的机会,把这篇文章重写了。


App操作中经常涉及用户登录操作,用户登录就需要使用用户名和密码。为了安全起见,在登录的过程中暴露密码的机会越少越好。

登录过程中怎样才能最大程度地避免泄露用户的密码的可能呢?

用户登录后,App后台怎么去验证和维持用户的登录状态呢?

本节提供了一套用户登录的解决方案以供读者参考。

使用HTTPS协议

避免信息的泄露,最基本的方案是所有涉及安全性的API请求都必须使用HTTPS协议。

HTTPS协议是“HTTP协议”和“SSL/TLS协议”的组合。

SSL是“Secure Sockets Layer”的缩写,中文称为“安全套接层”,其是20世纪90年代中期由网景公司设计的。原来在互联网上使用的 HTTP 协议是明文,存在很多缺点(比如传输内容会被偷窥和篡改),发明 SSL协议是为了解决这些问题。到了1999年,SSL协议因为其应用广泛已经成为互联网上的事实标准,IETF 就在1999年把SSL协议标准化。SSL协议标准化之后的名称改为TLS(Transport Layer Security)协议,中文称为“传输层安全协议”。习惯上把这两者并列称呼(SSL/TLS),因为这两者可以视作同一个东西的不同阶段。

可以把HTTPS大致理解为“HTTP over SSL”或“HTTP over TLS”。其是一个安全通信通道,基于HTTP开发,用于在客户计算机和App后台之间交换信息。其使用安全套接字层(SSL)进行信息交换,简单来说其是HTTP的安全版。HTTPS实际上应用了安全套接字层(SSL)作为HTTP应用层的子层。

HTTPS的模型如下图所示。
这里写图片描述

读者看看支付宝涉及登录和支付的页面,URL都是以HTTPS开头,这就意味通信是使用HTTPS。国内主流开放平台的API,例如新浪微博、腾讯等,API请求都是以HTTPS开头。

HTTPS是业界常用的安全协议,支付宝登录的页面就是使用了HTTPS协议,如下图所示。
这里写图片描述

基本的用户登录方案

传统Web网站使用Cookie+Session保持用户的登录状态,那么在App后台怎么实现类似的功能呢?在App后台怎么避免每次验证用户身份都需要传输用户名和密码呢?

解决上面的问题,可以参考下面例子。
把App后台想象为一个房间,里面有个房间管理员。同时房间门有一把锁,这把锁有两种打开方式。

• 输入了这把锁上注册的用户名和密码。
• 用房间管理员提供的钥匙。

用户进入这个房间的流程如下。
(1)用户第一次输入锁上注册的用户名和密码打开这把锁后进入房间,找到房间管理员,让其提供一把钥匙。

(2)以后用户每次需要进入这个房间用这把钥匙就行,不用担心旁边有人偷看到自己的用户名和密码,从而导致用户名和密码的泄露。

(3)用户决定一段时间内不再进入这个房间,又怕钥匙被偷,进入房间后把钥匙还给管理员,让管理员把钥匙销毁。

其中(1)就是用户的登录操作;(2)就是用户登录后验证身份的操作;(3)就是用户退出登录的操作。

把上面的例子转换为计算机的操作,描述如下。

(1)App后台接收到App发送的用户名和密码后,验证用户名和密码是否正确。如果错误则返回错误信息。如果App后台验证正确,生成一个随机的不重复的token字符串(例如“daf32da456hfdh”),token字符串作为用户的唯一标识(token就是上面例子中提到的钥匙)。在Redis中建立token字符串和用户信息的对应关系,例如,把token字符串“daf32da456hfdh”和id为“5”的用户对应。注意:Redis 的hash数据结构将会在“7.2.2 hash—存储对像的数据”这节中详细讲解。

(2)App后台把token字符串和用户信息返回给App,App保存这些数据作为以后身份验证的必备数据。生成token的流程如下图所示。
这里写图片描述

(3)需要验证用户身份的操作必须要把token字符串传给App后台验证身份。

例如,“test.com/user/update”是更新用户的信息的API,这个API必须验证用户身份,当调用API“test.com/user/update”时,把token字符串“daf32da456hfdh”附在URL上,变成“test.com/user/update?token=daf32da456hfdh”。

当App后台接收到这个API请求时,权限设置中要求验证用户身份,于是取出参数中token的值“daf32da456hfdh”,在(1)中建立的token字符串和用户信息的对应关系中查找,如果没发现这个token值,则返回验证失败的信息,如果发现这个token值,则获取这个用户的信息,进行相关的更新操作。

注意:这个方案并不是十分安全,身份验证依赖token字符串。如果用户泄露了URL,那token也泄露了,这相当于钥匙被黑客复制了一份。在下一篇“ App通信安全”中将描述一个防止token在通信中泄露的方案。

本章内容摘录自本人出版的书籍《App后台开发运维和架构实践》

《App后台开发运维和架构实践》的购买链接

京东

京东
当当
亚马逊
互动出版网
天猫

打开链接 app后端设计–总目录 ,能查看本人发表过的所有原创“app后端”文章。

【作者】曾健生
【QQ】190678908
【微信公众号】 appbackend
【新浪微博】 @newjueqi
【博客】http://blog.csdn.net/newjueqi

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

39.App中用户验证方案 的相关文章

随机推荐

  • 从HTTP协议分析转发和重定向的区别

    文章标题 从 HTTP 协议分析转发和重定向的区别 文章作者 曾健生 作者邮箱 zengjiansheng1 64 126 com 作者 QQ 190678908 作者 MSN zengjiansheng1 64 hotmail com 作
  • 编写SQL查询的关键—SQL语句的执行顺序

    文章标题 编写 SQL 查询的关键 SQL 语句的执行顺序 文章作者 曾健生 作者邮箱 zengjiansheng1 64 126 com 作者 QQ 190678908 作者 MSN zengjiansheng1 64 hotmail c
  • 用Java实现二叉树

    lt Font Definitions 64 font face font family 宋体 panose 1 2 1 6 0 3 1 1 1 1 1 mso font alt SimSun mso font charset 134 ms
  • Java下实现快速排序

    文章标题 lt Font Definitions 64 font face font family 宋体 panose 1 2 1 6 0 3 1 1 1 1 1 mso font alt SimSun mso font charset 1
  • Java实现之冒泡排序

    lt Font Definitions 64 font face font family 宋体 panose 1 2 1 6 0 3 1 1 1 1 1 mso font alt SimSun mso font charset 134 ms
  • 38.“财务自由“,喂给创业者的童话故事

    现在我们拼搏两三年 xff0c 等公司上市后 xff0c 就实现财务自由 xff0c 就能过上好日子 上面是我看到有些人拉创业者入伙时说的话 xff0c 很具有蛊惑性 我很疑惑 xff0c 怎么 财务自由 就和 过上好日子 画上了等号呢 x
  • nodejs模块xml2js解析xml的坑

    在一个项目中 xff0c 用到nodejs模块xml2js解析xml xff0c xml的数据如下 xff1a lt xml gt lt MsgId gt 6197906553041859764 lt MsgId gt lt xml gt
  • 推荐《超右脑英语学习法》

    文章标题 推荐 超右脑英语学习法 文章作者 曾健生 作者邮箱 zengjiansheng1 64 126 com 作者QQ 190678908 作者MSN zengjiansheng1 64 hotmail com 作者博客 blog cs
  • git回退到某个历史版本

    1 使用git log命令查看所有的历史版本 xff0c 获取某个历史版本的id xff0c 假设查到历史版本的id是139dcfaa558e3276b30b6b2e5cbbb9c00bbdca96 2 git reset hard 139
  • 手把手教你研发属于自己的智能无人机

    1 让智能无人机梦想变成现实 对于大多数极客学员来说 xff0c 自己组装一台无人机 xff0c 可以航拍 xff0c 可以目标跟踪 xff0c 是心中的梦想 xff0c 但是实现梦想的学员却很少
  • zookeeperd无法启动的分析

    在文章 zookeeper启动失败的排错中描述了zookeeperd的一种启动错误 xff0c 今天笔者还发现了另外一种启动错误 xff0c 顺便记录下来 xff1a 一台测试的服务器重启后 xff0c 运行zookeeperd的启动脚本显
  • 用go代码操作git

    git2go是一个用go代码操作git的库 xff0c 需要依赖于第三方库libgit2 安装libgit2前 xff0c 先安装相应的包 xff1a yum y install libssh2 devel 在 https github c
  • js format 函数的实现

    function format str fmt var usedDate 61 new Date usedDay var o 61 34 M 43 34 usedDate getMonth 43 1 月份 34 d 43 34 usedDa
  • Dockerfile中CMD与ENTRYPOINT的区别

    ENTRYPOINT xff0c 表示镜像在初始化时需要执行的命令 xff0c 不可被重写覆盖 xff0c 需谨记CMD xff0c 表示镜像运行默认参数 xff0c 可被重写覆盖ENTRYPOINT CMD都只能在文件中存在一次 xff0
  • 怎么快速学习App后台开发

    本人从去年7月份开始持续到今年2月份 xff0c 终于写完了书籍 App后台开发运维和架构实践 xff0c 这是一本教导刚入行的同学快速学习App后台开发的书籍 你是否遇到下面的情景 xff1f 接到新开发任务 这些功能应该怎么做 xff1
  • 《App后台开发运维和架构实践》前言

    笔者在2012年从开发电子商务网站转向了开发App后台 xff0c 当时在一家做社交App的创业公司里工作 xff0c 笔者和搭档都没有任何从事移动互联网开发的经验 xff0c 不清楚App后台怎么架构 xff0c 只能摸着石头过河 xff
  • 《App后台开发运维和架构实践》推荐序

    软件开发工具的成长速度远远超过开发人员的成长速度 xff0c 这是现实 每个月 xff0c 甚至每天 xff0c 我们都可以见到新的类库 框架 工具 语言 它们或者极大地降低了开发的成本 xff0c 或者极大地提升了开发的效率 随之而来的问
  • 《App 后台开发运维和架构实践》完整目录

    ps xff1a 由于书的目录太长了 xff0c 各大网店 xff08 京东 xff0c 当当 xff0c 亚马逊 xff09 都显示不完整 xff0c 所以这里列出目录的完整版 第1章 App后台入门 16 1 1 App后台的功能 16
  • 《App后台开发运维和架构实践》样章下载

    App后台开发运维和架构实践 样章和目录下载 xff1a 本书前三章的初稿在出书前已经发布网络上 xff0c 可通过下面两种途径获取 xff1a xff08 1 xff09 订阅本人公众号 app后端 xff0c 通过 历史文章 阅读以前的
  • 39.App中用户验证方案

    注 xff1a 这篇文章为15 app后端怎么设计用户登录方案的修改版 xff0c 以前的这篇博客写得太简单了 xff0c 弄得很多同学理解不了 xff0c 趁着写书 App后台开发运维和架构实践 的机会 xff0c 把这篇文章重写了 Ap