QQ与微信是我们日常生活中最常用的软件,其他第三方网站我们也能通过QQ与微信进行快捷登录,那么它们的底层原理是怎么样的,又采用了什么技术呢,一起来看看吧。
OAuth2.0简介
我们打开微信登录与QQ登录的开发文档,就能清楚看到,它们都使用了同一个东西叫做OAuth2.0,那么OAuth2.0是什么东东呢?(‧_‧?)
微信登录
OAuth2.0是一种授权协议,用户授权第三方网站,允许他们访问用户存储在服务器上的信息,而不需要将用户名和密码提供给第三方网站,并可以控制第三方网站能访问的数据范围。
OAuth2.0的角色
1.Resource Owner
可以是个人,也可是一个程序。它们是存储在资源服务器上数据的拥有者。
2.Client
客户端程序,它需要访问被存储在资源服务器上的数据,
3.Authorization Server
认证服务器,它能够给Client进行授权,使Client访问资源服务器上的数据
4.Resource Server
资源服务器,它存储着客户端想要的资源
OAuth2.0的四种授权方式
1.授权码模式(Authorization Code)
该模式需要两次访问认证服务器
第一次:用户进行授权后,客户端程序从认证服务器,拿到Authorization Code
第二次:客户端程序携带Authorization Code从认证服务器兑换成accessToken,后续通过该accessToken进行数据访问,Authorization Code兑换成AccessToken后马上失效。
后续accesstoken过期后,通过refreshToken来获取新的accesstoken,不需要用户再参与。一般accesstoken的生命周期是分钟到小时,而refreshToken的生命周期是天、周甚至月。
这是最安全的一种模式,获取accessToken需要授权码与secret。secret是认证服务器与应用服务器共享的,没有其他人会知道。微信登录、支付宝登录等都是基于这种模式。参照上面的微信登录流程图。
2.隐形授权模式(Implicit)
该模式比上面的授权码模式,少了一个授权码阶段。用户进行授权后,会直接返回accesstoken。
3.密码模式(Resource Owner Credentials Grant Type)
该模式就是通常的输入用户名与密码获取token的一种模式
4.客户端模式(Client Credentials Grant Type)
该模式通常用于后端内部微服务之间的调用,不需要用户的授权,不是用来进行用户校验使用。