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中用户验证方案 的相关文章

  • app开发好了你还不得不了解ASO

    前言 互联网的高速发展 带我们进入到了移动互联网时代 大家又开始了一轮APP开发的热潮 也就是移动应用开发 就像PC时代 大家都会创建自己的网站一样 现在苹果应用商店已经有上百万款的移动应用 Android的应用也有60万款左右 虽然数量上
  • flutter : Failed to find assets path for “Frameworks/App.framework/flutter_assets“

    在运行Flutter 项目的时候跑IOS模拟器上白屏许久不见进入主页面 等了20分钟一点动静也没有 打开Xcode 查看日志发现 Failed to find assets path for Frameworks App framework
  • 上架发布应用市场资料准备iOS和Androd

    一 应用市场 App Store 网站 https itunesconnect apple com login 帐号 密码 360手机助手 网站 http open app 360 cn 帐号 密码 安智市场 网站 http dev anz
  • hi3861使用iic驱动adxl346

    开发平台 Ubuntu 18 04 DOPI hi3861lv开发板 adxl346模组 Q群 735884031 一 配置3861iic 1 搭建demo工程 可参考我的上一篇博客 2 查看引脚复用 使用GPIO9 GPIO10作为iic
  • Android App软件框架搭建

    1 App软件框架搭建 1 0软件基本架构 1 1创建MainActivity并设置布局文件 布局文件如下
  • vue-cordova修改app图标+文字以及启动图

    前言 在使用 vue cordova 打包成apk的时候 我们一定会根据项目改把app的图标还有显示文字 加载图片也有可能改动 这里来说一说这个 1 修改显示文字 地址 D cordova app config xml 修改name里面的文
  • hbuilder打包ios所需的IDP/IEP证书创建流程

    在uniapp开发进行云打包的时候 打包Ios应用需要IDP IEP证书和证书profile文件 无论使用windows电脑 还是mac电脑 生成ios证书 需要苹果开发者账号 假如你还没有苹果开发者账号 你可以参考下文先到苹果开发者中心开
  • Poppuwindow的简单使用

    继 DialogFragment的简单使用 之后 我们再来试试 Poppuwindow 的简单使用 切记 本篇博客只能保证你入门哦 适合小白学习 效果展示 1 几个常用的构造方法 public PopupWindow Context con
  • 安装xposed(解决xposed问题)

    科学上网可轻松解决本文的问题 经过测试leidian mumu yeshen三个模拟器的最新版本只有leidian安装完成后可以重启 其他两个均会卡99 模拟器再起不能 MuMu模拟器win版 版本 2 1 3 可以 安装xposed前需关
  • 安卓图片浏览app,应付期末考试的(附下载链接)

    安卓图片浏览app 一个简单的安卓app 采用andstudio开发 有注册登录功能 可以搜索详细情况请看应用截图所示 下载链接 https download csdn net download weixin 43474701 850717
  • 上架发布应用市场资料填写规则限制

    应用名称填写时 名字长度有没有限制呢 1 名称 1 字数限制 iOS 30 Android 64 2 应用市场显示的名称 2 副标题 1 字数限制 iOS 30 2 应用市场显示的副标题 宣传文本填写时 可以编写多少个字 1 字数限制 iO
  • flutter 图表插件之fl_chart

    前言 之前很少接触图表功能 以为图表这种功能只能在H5上才能发挥得淋漓尽致 可谁曾料想 早有大神先把强大的chart图表功能给移植到flutter端上了 而且两端都可适用 下面给出网址 pub上 https pub dev packages
  • iOS App icon、启动页、图标规范

    原文 iOS App icon 启动页 图标规范 以下内容都是我在做App时通过自己的经验和精品的分析得来的 希望会帮助到你 但是有时个别情况也要个别分析 要活学活用 一 App Icon 在设计iOS App Icon时 设计师不需要切圆
  • 【基础教程】Appium自动化测试,太详细了!

    Appium简介 Appium是一款开源的Appium自动化工具 基于Webdriver协议 主要有以下3个特点 全能 支持iOS Andorid H5 混合App WinApp 通用 支持Win Linux Mac 支持Java Pyth
  • 惊呆了!女儿拿着小天才电话手表,问我Android启动流程!

    首先 new一个女儿 var mDdaughter new 女儿 6岁 漂亮可爱 健康乖巧 最喜欢玩小天才电话手表和她的爸爸 好了 女儿有了 有一天 女儿问我 爸爸爸爸 你说我玩的这个小天才电话手表怎么这么厉害 随便点一下这个小图片 这个应
  • OS X Java .app 捆绑包无法打开其他应用程序?

    我为 OS X 编写了一个 Java SWT 应用程序 将其导出为 jar 并将其捆绑到 app 中 除了我的应用程序中的关键部分之外 一切都按预期工作 它需要打开其他应用程序 我试过了Runtime exec 也ProcessBuilde
  • 有没有办法从 .app 文件对 Xcode 项目进行逆向工程?

    主题说明了一切 我这里有一个 app 文件 但 Xcode 项目不再对我可用 有没有什么方法可以获取 app 文件并从中逆向工程 Xcode 项目 以便我可以查看用于制作它的代码 首先 对源代码进行签名和加密 其次 如果您身在美国 古巴 朝
  • 我在哪里可以购买 .app TLD? [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 在哪里可以购买 app 顶级域名 TLD 我去了 Network Solutions GoDaddy 等
  • iOS:无法启动 .app 文件

    我不知道为什么它在我的 app 文件中寻找目录 每次我运行应用程序时 它都会在 iPhone 上安装应用程序 但不会运行并给出以下错误 谁能告诉我这个设置存储在哪里 谢谢 error failed to launch Users xxx L
  • iPhone:在命令行 (Mac OS X) 中压缩 .app 文件会删除 CodeSigning

    我正在尝试使用 TeamCity 对我的 iPhone 应用程序进行简单的构建自动化 但遇到了这个棘手的问题 当我从构建文件夹中手动拾取并安装 app 文件时 效果很好 与 iTunes 顺利同步 我可以在手机上看到该应用程序 但是 当我尝

随机推荐

  • 从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