给产品经理讲技术丨超级APP诞生记(一)
【文章摘要】千里之行始于足下,我们先从登录账号这里说起吧。
【相关推荐】
给产品经理讲技术丨超级APP诞生记(二)
给产品经理讲技术丨超级APP诞生记(三)
给产品经理讲技术丨没线,并不可怕?
给产品经理讲技术丨提需求的正确姿势是什么
给产品经理讲技术丨产品后悔药来了,讲讲热补丁技术
从今天开始,我们会开始一个系列,介绍一个超级APP是如何诞生的,前端后台的技术都有。请各位小伙伴准备好小板凳,在火炉旁找个位子坐下,我们这就开始了。
千里之行始于足下,我们先从登录账号这里说起吧。
账号登录几乎是每个APP必备的一个功能。我们在开发一个APP的时候,第一件事情几乎就是建立一个账号系统。不光是社交APP、游戏APP、视频APP需要账号,一些工具应用像管家们、大师们、卫士们甚至一个手电筒指南针也有非常完备的账号系统,你清理一次垃圾,浏览一次网页,下载一部小电影,都可以涨积分换奖品。这里不吐槽产品策略,我们来看下技术上是如何实现的,主要会涉及到一些安全上的问题。
一个最简单的想法就是在你注册的时候把账号密码提交到后台服务器,然后登陆的时候输入密码,拿到服务器一比对,对了就通过,错了就打回。整体思路就是这样,但是如果这道题100分的话,你这样回答我会给你59分。我觉得带着问题找答案是学习的一个好方法,等问题想明白了,知识也就get到了。所以我们先来探讨这几个问题。
注册和登录的时候,你的密码会直接发送到服务器吗?
不会。客户端和服务器之间是一条充满妖魔鬼怪的荆棘之路,我们前面也讲过,有搞劫持的,有搞DNS欺骗的,还有挂着羊头卖狗肉李鬼变李逵的。所以客户端拿到你输入的密码之后,第一件事就是:变身!先来一个哈希大保健。哈希的意思是,把你的密码(比如1234567)变成另一段谁也不认识的文字(比如2345121),并且这个过程是不可逆推的。也就是说,别人偷到了哈希之后的密码,也不会推导出你真正的密码。这样你的密码就可以上路了。
服务器验证成功之后,服务器会记住我吗?
不会。我们之前讲过服务器是记性不好的,你一走,他就忘了你是谁了。但是服务器不会让你白登录,这时候服务器会返回给你一个票据,下次请求数据的时候,把这个票据带上,服务器就知道你登录过了。打个比方,你要去坐飞机,在网上买了机票,付了钱,提交了身份证号码。这就相当于注册成功了,我们假设身份证就是你的密码,能证明你的身份。你去机场值机的时候,人家让你出示身份证,输入电脑一查,验证成功,会给你一张机票。这张机票的意义是,你现在可以把身份证收起来了,机票就相当于你的身份证。你要去坐飞机?出示机票就行了。你要去头等舱做一个安静的美男子?出示机票就行了。那为什么不每次都出示身份证,要这个机票干嘛呢?很简单,你的身份证多宝贵啊,天天拿在手里,丢了怎么办?所以这里有一个原则,尽量不要让密码在网络上传来传去(包括哈希之后的)。另一方面,票据是有过期时间的,飞机飞走了,你的机票就成了一张废纸。别人偷了你的机票,等飞机飞走了,还是一张废纸。
记住密码和自动登录是怎么回事儿?
假如你勾选了记住密码,客户端就真的记住你的密码吗?不用。客户端只是我们的一个代理,是替我们去APP后台拉取数据的,你会把你的身份证交给一个代理保管吗?只需要把票据给他就行了。它会把票据存期来,下次登陆的时候拿去服务器做验证。那么这个票据,藏在哪里好呢?在计算机里面,理论上内存是最安全的,进程是个隔离的,没人能轻易的读到别人进程里的东西。不过也有个例外,如果你的Android手机root了,各种管家和卫士就会在你的进程里扎根,监视你的一举一动。内存断电会丢失,所以我们一般存在SD卡上。这里你会与盗号者们正面交锋,所以要用上各种变态的加密算法。哦,对了,浏览器的话还可以存在Cookie里,虽然不怎么安全,但是很方便。
账号登陆讲完了,整个过程其实很简单,主要是一些安全上的概念。安全问题真的很重要,希望大家引起重视。不信?我给你们讲个笑话。从前,有个哥们儿叫陈冠希…
欢迎添加微信公众号:给讲技术