Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >退出功能需要网络支持吗?

退出功能需要网络支持吗?

作者头像
needrunning
发布于 2019-12-30 01:57:24
发布于 2019-12-30 01:57:24
1.7K0
举报
文章被收录于专栏:图南科技图南科技

本文实际上是一道面试题,关于账号退出主题做一些探讨。

对应功能常见的设计思路,表达能力,易混淆的概念,功能责任的分离,直至网络协议的一些特点,通过这道面试题就可以挖掘出来了。

你在网上是搜不到答案的,只有我跟面试者沟通时才会这么出题。

这道题会涉及以下几个方面

“用户状态保存逻辑/常见的软件应用开发中如何存储和维持用户的状态?

更多的应聘者会提到 Token,那么

“Token 服务端的设计策略是什么

进而细化为

“服务端如何识别用户

回到题目如何理解状态,前后端分离大多采用 HTTP 协议通讯,HTTP 却是无状态的,而我们又要保存用户的状态,矛盾了吧

“HTTP 是无状态的,单纯的做请求响应,而业务必须是有状态的,否则业务无法流转和推进。二者是如何关联的

“账号体系如何设计的

这样沟通下来是不是一连串的问题都引申出来了?

理解状态

状态的理解实际上很抽象,我们可以 理解为状态就是业务的延续性,有了状态 ,业务才能正常流转。流转实际上是数据的流动,进而状态就是在处理数据。

对无状态的理解核心-独立,【每次请求是独立的,低耦合的】。状态实际上最终是通过数据体现的,有状态就代表着过多的数据依赖。

接口设计最佳实践[1] 文中有以下一句建议

“A RESTful API should be stateless

This means that request authentication should not depend on cookies or sessions. Instead, each request should come with some sort authentication credentials.

现在 业界最流行的状态保存维护方案就是 Token 机制。从 cookies 和 session 到 Token,就是技术的演化过程。

思考

“客户端 (特指安卓和 iOS 的原生客户端)中有 cookies 和 session 的概念吗?如何理解和阐述

账号系统设计第一要点 登录与退出

既然题目中提到了退出功能,说一说账号系统的设计。

之前产品同事在需求评审中提出一个场景:

公众号链接业务系统登录,用户在业务系统修改密码之后,返回到微信公众号中仍然可以进入需要登录授权才可以访问的页面,没有任何重新登录的提示。

其实原因很简单,微信公众号链接业务系统登录的体系采用的 Token 保存用户信息的两方 OAuth 协议(注意啊这里说的是业务系统本身的登录逻辑,并不是微信开发平台)。

Token 有一个有效时长的生命周期,鉴于减少用户频繁登录的用户体验效果,微信端的 Token 时长会设置的长一些,比如一个月。当在有效时长内,用户修改密码后,实际上微信端的 Token 是感知不到的。

为什么感知不到,从产品的完整度来说,这块是欠缺的,从技术方面来说这要从 Token 的生成和存储谈起。

Token 生命周期由客户端登录场景发起,服务器端负责分配和管理。最常见的存储方式是在 redis 数据库中采用 key value 形式,而 key 是 token, value 是一些需要缓存的热点数据,一般以用户编号,用户名等 profile 信息为主。

账户系统如果设计到这一步,已经可以满足大部分应用系统以云端为中心,多个客户端正常登录的情况了。这种验证方式也是我上文提到的 宽泛的两方 OAuth 协议的应用。之前有一篇文章单独阐述了两方 OAuth 系统服务化构建-两方 OAuth[2]

接着继续描述,端应用拿着用户的 Token 信息,会对应查找到缓存数据。修改密码后,系统拿到的是用户编号之类的唯一标识。如果在生成 Token 时,没有做用户唯一标识与 Token 的对应关系,那么修改密码后也就关联不到用户已生效的 Token 信息。

“两个对应关系,分别是以 Token 为 key,和以用户唯一标识为 key,结合使用就可以实现 Token 的管理

账号系统设计的第二要点 远程管理

我们把接入账号系统的系统都抽象为应用,不管是网站,原生 APP,混合 APP,还是微信小程序。远程管理的用户有两类,一类是云端管理人员,一类是登录用户。

云端管理人员 远程查看用户登录状态,在线统计,多设备管理,踢人,都是这方面的应用场景。

登录用户在个人中心查看个人账号登录过哪些应用,剩余时长如何,实现登录应用退出。如图 2 Teambition 的个人中心。

通行证-应用管理.png

以上是开放平台授权登录的套路,只涉及到应用服务端和客户端,并没有达到 OAuth 三方角色的复杂度。

“远程账号分配,保持,注销,统计

账号系统设计的第三要点 服务化

基于以上两个要点设计完成之后,账号系统已经满足了独立于其它的系统的要求,可以以账号中心的身份自行运转了,其本身就是一个通行证的协调分配中心。我们试着列出如下 FetureList

实名验证

1 验证手机

实现方式 通过发送验证码来验证登录身份

2 多种登录渠道,如手机验证码,用户名密码,微信扫码(第三方账号的一种),手机与密码(用户名登录的一种)

应用授权管理

“企业的应用分为内部应用和外部应用

应用列表

退出应用

登录应用

退出所有应用

操作日志

在线人数统计

运营分析

...

安全中心

1 账号信息常规维护,密码修改,找回,登录方式选择

2 密码修改后的登录管理 (单点登录,设备关联,退出已有登录)

3 登录有效时长(由端应用自行控制)

...

退出功能与网络支持

回到题目中,退出功能与网络支持的产品形态是这样的:

退出功能,请求退出登录接口,服务端注销登录凭据,客户端移除相关本地存储。有无网络,退出接口是否成功,都以退出成功的交互引导用户,至于其它的,通过技术来实现。如服务端的自动失效等。

常见的误区是,退出只做客户端的凭据删除,然后跳转登录页面,这样的流程过于简单了。

end 2019 年 12 月 公众号 图南日晟 封面来源于朋友圈

参考资料

[1]

接口设计最佳实践: https://www.vinaysahni.com/best-practices-for-a-pragmatic-restful-api

[2]

系统服务化构建-两方OAuth: https://www.jianshu.com/p/53b11a613cd4

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-12-23,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 图南科技 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
IDaaS 技术解析 | 单点登录技术之 Token 认证
IDaaS 即提供基于云的身份认证和管理服务的平台,确保在准确判定用户身份的基础上,在正确的时间授予用户正确的应用、文件和其他资源的访问权限。IDaaS 能提供多种标准化功能帮助用户实现高效、安全的身份认证管理服务,如单点登录、智能多因素认证、账号生命周期管理等等。 由于 IDaaS 在国内尚属于新兴产品形态,很多人对它只有模糊的印象,所以我们计划用一系列文章,深入浅出介绍 IDaaS 相关的技术原理和细节。本文是“IDaaS 技术解析”系列的第一篇。
玉符IDaaS
2020/09/03
5K0
【node.js】谈一下自己关于多系统共用账号的一点实践
由于没事喜欢自己瞎鼓捣,写一些感兴趣的项目,虽然三天打鱼两天晒网,项目一直没写出来,但是野心倒是挺大的,规划中有几个小项目想写,每个项目都会有登录系统,如果每个项目的登录系统都写一遍,肯定是太过麻烦的,而且不容易把几个项目关联起来,于是就想几个项目通用一套账号系统,就类似于腾讯系应用一样,一个QQ号可以登录腾讯游戏、腾讯视频、腾讯音乐等。在网上搜了很久,可能是搜的方法不对吧,搜到的大都是讲的多点登录的,总之就是没搜到完全符合我需要的解决方案,但是也不能说完全没有用,于是自己结合搜到的知识点又加上自己摸索,就总结了一套自己的账号体系,出于交流和学习的目的,来和大家分享一下
十里青山
2022/08/22
4070
【node.js】谈一下自己关于多系统共用账号的一点实践
前端登录,这一篇就够了
登录是每个网站中都经常用到的一个功能,在页面上我们输入账号密码,敲一下回车键,就登录了,但这背后的登录原理你是否清楚呢?今天我们就来介绍几种常用的登录方式。
刘小夕
2020/08/21
1.4K0
前端登录,这一篇就够了
系统服务化构建-两方OAuth
鉴于微博,QQ,微信等开发平台的影响,互联网界的工程师都知道 OAuth 协议,对 Token 存储用户信息的机制有所了解,却很少有人提及两方 OAuth 这个概念。
needrunning
2019/12/05
6510
微服务架构统一安全认证设计与实践
点击上方“芋道源码”,选择“设为星标” 管她前浪,还是后浪? 能浪的浪,才是好浪! 每天 10:33 更新文章,每天掉亿点点头发... 源码精品专栏 原创 | Java 2021 超神之路,很肝~ 中文详细注释的开源项目 RPC 框架 Dubbo 源码解析 网络应用框架 Netty 源码解析 消息中间件 RocketMQ 源码解析 数据库中间件 Sharding-JDBC 和 MyCAT 源码解析 作业调度中间件 Elastic-Job 源码解析 分布式事务中间件 TCC-Transaction
芋道源码
2022/03/15
8880
企业级微服务架构统一安全认证设计与实践!
当企业应用系统逐渐增多后,每个系统单独管理各自的用户数据容易形成信息孤岛,分散的用户管理模式阻碍了企业应用向平台化演进。当企业的互联网业务发展到一定规模,构建统一的标准化账户管理体系将是必不可少的,因为它是企业互联网云平台的重要基础设施,能够为平台带来统一的帐号管理、身份认证、用户授权等基础能力,为企业带来诸如跨系统单点登录、第三方授权登录等基础能力,为构建开放平台和业务生态提供了必要条件。
架构师修行之路
2021/02/25
8140
企业级微服务架构统一安全认证设计与实践!
Java面试指北!13个认证授权常见面试题/知识点总结!| JavaGuide
我发现有很多小伙伴对认证授权方面的知识不是特别了解,搞不清 Session 认证、JWT 以及 Cookie 这些概念。
Guide哥
2021/06/17
1.2K0
统一多账户登录的方案
这里的多账户区别于系统级别的,我们讲的多账户系统是指,在我们互联网应用当中,我们的应用会使用多个第三方账号进行登录,必须现在常用的APP(网易云音乐)登录方式包含:网易、微信、QQ
php007
2019/08/05
1.7K0
统一多账户登录的方案
危险!请马上停止 JWT 使用!!!
JSON Web Tokens,又称 JWT。本文将详解:为何 JWT 不适合存储 Session,以及 JWT 引发的安全隐患。望各位对JWT有更深的理解!
搜云库技术团队
2024/03/25
5200
危险!请马上停止 JWT 使用!!!
硬核总结 9 个关于认证授权的常见问题!看看自己能回答几个!
大家好,我是Guide哥!相信很多人对认证授权方面都不是特别了解,搞不清Session认证、JWT以及 Cookie 这些概念。所以,根据我根据日常对这部分学习已经在项目中的实际运用总结了这8 个相关的问题并且附上了详细的回答(这篇文章这么晚才发的原因)。
Guide哥
2020/05/07
9980
Restful安全认证及权限的解决方案
一、Restful安全认证常用方式  1.Session+Cookie  传统的Web认证方式。需要解决会话共享及跨域请求的问题。  2.JWT  JSON Web Token。  3.OAuth 
庞小明
2018/03/09
3K0
Restful安全认证及权限的解决方案
一口气说出前后端 10 种鉴权方案~
在介绍鉴权方法之前,我们先要了解的是:什么是认证、授权、鉴权、权限控制以及他们之间的关系,有了他们做铺垫,那么我们才能做到从始至终的了解透彻 ~
终码一生
2022/10/28
8.3K1
一口气说出前后端 10 种鉴权方案~
多维系统下单点登录之整理解决方案
访问淘宝网站, 登录之后, 再访问天猫网站, 你会发现, 天猫也是处于登录状态,那么具体是如何实现的?
小熊学Java
2024/08/27
4290
多维系统下单点登录之整理解决方案
微服务架构下的统一身份认证和授权
本文讨论基于微服务架构下的身份认证和用户授权的技术方案,在阅读之前,最好先熟悉并理解以下几个知识点:
matinal
2020/11/27
4.4K0
微服务架构下的统一身份认证和授权
你们leader 可能都不知道的用户鉴权机制的原理
互联网年代,一个网站的用户数,就是这个网站的命脉,那么,这些用户的账户安全问题很成问题,于是行业大佬们,开始忧国忧民,研究出很多解决当下痛点的解决方案。从最开始的前后端不分离,研究出来的session-cookie,到后来基于前端存储的Token 验证 ,后来网站越来越多多了,为了不总是注册账号推出来的OAuth权限,以及一个公司项目太多了,为了防止重复登录开启的单点登录。
用户7413032
2022/03/09
1.4K0
你们leader 可能都不知道的用户鉴权机制的原理
浅谈一下前后端鉴权方式 ^.^
虽然本人现在从事前端开发,但是之前一直是 PHP 全栈,所以对前后端鉴权机制也有一定的了解,就找些资料简单记录一下吧。(瞎掰扯~)
老猫-Leo
2023/12/11
6910
浅谈一下前后端鉴权方式 ^.^
单点登录落地实现技术有哪些,有哪些流行的登录方案搭配?
实现单点登录说到底就是要解决如何产生和存储那个信任,再就是其他系统如何验证这个信任的有效
艾编程
2020/06/10
3.6K0
区分清楚Authentication,Authorization以及Cookie、Session、Token
这是一个绝大多数人都会混淆的问题。首先先从读音上来认识这两个名词,很多人都会把它俩的读音搞混,所以我建议你先先去查一查这两个单词到底该怎么读,他们的具体含义是什么。
乔戈里
2019/10/09
5.4K0
感性认识JWT
关于JWT,相信很多人都已经看过用过,他是基于json数据结构的认证规范,简单的说就是验证用户登没登陆的玩意。这时候你可能回想,哎哟,不是又那个session么,分布式系统用redis做分布式session,那这个jwt有什么好处呢?
猿天地
2018/12/26
1.1K0
深入理解JWT的使用场景和优劣
经过前面两篇文章《JSON Web Token - 在Web应用间安全地传递信息》《八幅漫画理解使用JSON Web Token设计单点登录系统》的科普,相信大家应该已经知道了 JWT 协议是什么了。至少看到 eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJxaWFubWlJZCI6InFtMTAzNTNzaEQiLCJpc3MiOiJhcHBfcW0xMDM1M3NoRCIsInBsYXRmb3JtIjoiYXBwIn0.cMNwyDTFVYMLL4e7ts50GFHTv
kirito-moe
2018/04/27
3.4K0
深入理解JWT的使用场景和优劣
相关推荐
IDaaS 技术解析 | 单点登录技术之 Token 认证
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档