在日常使用各个APP的时候,大家应该都或多或少接触过与“授权”有关的场景。大家有没有想过在不需要输入密码账号的情况下,是怎么实现第三方登录的呢?本文作者将结合自己的项目经历来跟大家谈谈他所知道的授权登录。
谈到授权登录,相信大家并不陌生,在日常使用各个APP的时候,大家应该都或多或少接触过与“授权”有关的场景,比如:进入支付宝或微信中某个子应用时会出现的弹窗,这些都属于授权登录的范畴。在支付宝和微信所包含服务越来越多的情况下,这个功能给我们带来了极大的便利。
但不知道大家有没有想过,这种看似很正常、方便、简单的功能,是怎么做到在我不输入任何账户密码信息的情况下实现第三方服务账户登录的,而且在登录之后里面的购物车、订单记录还都全部同步了。而且在第一次授权成功之后,后面的登录都是直接完成的。
是因为微信或者支付宝拿到并保存了我们的账号密码么?那这个算信息泄露么?
本文我将就自己的项目经历来谈一谈我所知道的授权登录。
二、名称解释:什么是授权登录?
授权登录是指通过一套简单、安全的交互流程,让第三方应用可以在不知道用户登录名和密码的情况下,获取到用户的的对应信息,从而实现在第三方应用中的对应客户端的登录并关联第三方平台账户。
也就是说,对于用户来说,当你登录了一个APP之后,你再使用这个APP上的任何第三方服务,都不需要再手动输入一遍第三方服务对应的账号密码。而且在完成第一次登陆后,接下来的一段时间内用户再使用此服务都可以实现无感知登录。
三、需求背景:为什么要做授权登录?
(1)缩短用户操作步骤,降低流失率
手动输入账号密码如果作为常规的登录方式,那么在阻断用户操作流程的同时,必然也会将一部分用户赶走,故授权登录降低了用户的操作成本,更容易促进用户转化的前提。
(2)统一接入规范,把控登录方式
因为各应用的页面是由第三方自己开发的,所以再风格样式、提供服务等方面的差异,必然会导致各服务的登录页面也会存在着些许差异,例如:在同一个平台上,有的应用支持手机验证码登录、有的支持邮箱登录、有的甚至还支持其他平台的账号登录(如:微信里面支持支付宝账号快捷登录),这其实是不利于整体品牌形象的营造和用户体验的统一的。
(3)获取用户信息,考虑合规要求
授权登录在为用户提供便利的同时还能获取更多的信息(如:昵称、头像),并且授权弹窗上的用户协议可以避免合规性风险。
(4)协议管理方便,快速签约解约
同意授权登录之后等于用户跟平台签订了一个允许获取指定信息的协议,故授权登录功能必然会带来协议管理功能,通过此功能,用户可以快速的注销各服务的账号。
四、前端业务流程:授权登录相关的业务流程
1. 授权登录流程
2. 查看用户授权协议
3. 解除协议流程
五、关于后端业务流程:授权登录相关后台之间的交互
1. 简单概括后端交互流程
2. 其中必要的参数
- code:可以看作第三方要发起授权所必须取得的通行证,有了这个通行证,双方的服务层才能进行交互。当第三方前端调起授权弹窗时,由客户端前端获得后返回给第三方,第三方拿到code后,可以通过后端之间的交互去申请指令派access_token,有效期很短(可能短于5s)。
- access_token:俗称指令牌,由客户端服务端鉴权中心根据code和第三方应用信息返回给第三方后端,有了指令牌,第三方就可以申请从客户端服务器里获得用户信息了,有效期一般较短(如1个小时)。
- refresh_token:用以在access_token过期后,重新刷新指令牌的计时,有效期一般较长(如120天),超过有效期之后,整个授权登录过程就要重新来一遍。
- openid:用户的唯一标识,通过openid第三方可以从客户端服务器拿到对应用户的账户信息,从而将其和自己本身的账号进行关联。
3. 几种异常情况
六、部分产品相关的考虑
1. 数据指标——注意页面埋点
2. 产品体验——部分细节
分享搭建内网服务器教程
以CentOS7服务器为例(其它系统比如ubuntu)
服务器配置:2核4G 固态:120G空间 机械 :1T 台式主机zhu
一、下载系统镜像
下载链接:https://opsx.alibaba.com/mirror?lang=zh-CN
1.选择下载os镜像
2.选择CentOS7版本
3.虚拟机,安装的时候可以选择最轻量级的7(x86_64-NetInstall-1810)版本——我的服务器属于独立的,所有我选择7(x86_64-DVD-1810)版本
以上下载软件需要镜像刻录到U盘中,我采用UItralSO进行刻录。
二、镜像制作
请向微信公众号发:制作启动盘,会推送消息给你。
三、安装CentOS7系统
1.插入我们刚刚准备的制作U启动盘(Centos7系统)U盘, 主机开机—连续按住按下键盘Del键,进入主板设置boot
2.选择Hard Drive BBS Priorities界面,选择Kingston DataTraveler 3.0,在系统Boot Option #1/#2/#3代表系统启动的方式,默认为#1为电脑的启动方式
3.选择对应的系统盘,默认采用Kingston DataTraveler 3.0为第一启动盘,然后就是固态硬盘120G,机械硬盘排最后。
4.返回到Boot系统,并且对应的Boot Option #1选择Kingston DataTraveler 3.0,Boot Option #2选择固态硬盘120G
5.设置完成后,按下键盘F10键在提示是否保存更改并退出时选择yes(是)回车退出,OK设置完成。
该流程依旧不同的电脑,安装方式类似。
6.系统进入安装CentOS7,先使用Test thismedia & install CentOS7(测试这个媒体并且安装CentOS7)
7.以下系统测试界面
8.选择系统语言,可以安装多种语音方式,但是默认采用英文,本机安装为:简体中文—-点击右下角的”确认”键
9.选择日期和时间—上海时区–返回系统设置界面
10.键盘语言:汉语
11.软件选择,最小安装—右边全选—左上角确认–返回系统设置界面
12.安装位置:选择安装目标位置,本机以固态120G为主盘,机械盘为副盘,该操作会格式系统内的所有数据,尽量采用有数据的硬盘
13.勾选两个盘,会弹出安装选项—-选择回收空间
14.然后弹出回收硬盘空间,出现对应的盘,选择—全部删除–点击回收空间—右上角的确认–返回系统设置界面
15.选择获取网络和主机名(记住ip地址:192.168.0.102固定的,需要远程连接时候用到)—打开右上角的开关–返回系统设置界面
16.系统直接安装,并且进入用户设置功能
17.选择root密码设置,这个是系统最高权限的使用者,必须设置,并且记住密码,防止忘记密码。—左上角确认–返回用户设置界面
18.创建用户–该设置可以创建不同角色的人,但是只能访问对应的目录,看你如何设置–返回用户设置界面
19.返回操作,系统自动安装–等待安装情况。
20.进入操作命令界面
21.采用远程连接这台搭建的centos7系统
22.确定后,自动连接到本地服务器。
以上Centos7为例,该制作启动盘唯一不同之处在于镜像不相同,但是操作原理一样。