OAuth2。0原理图解第三方网站为什么可以使用微信登录
欢迎大家关注今日头条号「JAVA前线」查看更多精彩分享文章,主要包括源码分析、实际应用、架构思维、职场分享、产品思考1 文章概述
假设小明开发了一个A网站,需要支持微信登陆和淘宝账号登陆。如果你是微信或者淘宝开发人员,你会怎么设计这个功能?本文结合淘宝开放平台官方文档以淘宝账号为例。
从最简单视角去思考,用户在网站A输入淘宝用户名和密码,网站A调用淘宝接口校验输入信息,校验通过则登陆成功,整体流程如下图:
上述思路存在什么问题?最显著的问题就是信息安全问题。问题第一个方面是用户需要将淘宝用户名和密码输入网站A,这样会带来用户名和密码泄露风险。问题第二个方面是如果用户不信任网站A,那么也不会输入淘宝用户名和密码,影响网站A业务开展。 2 OAuth2.0
第三方登陆信息安全问题应该如何解决?OAuth是一种流行标准。如果执行这行这个标准,那么用户可以在不告知A网站淘宝用户名和密码情况下,使用淘宝账号登陆A网站。
目前已经发展到OAuth2.0版本,相较于1.0版本更加关注客户端开发者简易性,而且为桌面应用、web应用、手机设备提供专门认证流程。 2.1 四种角色
OAuth2.0标准定了义以下四种角色: 客户端(Client) 资源所有者(Resource Owner) 资源服务器(Resource Server) 授权服务器(Authorization Server)
OAuth2.0四种角色交互流程:
第一章节实例对应四种角色:
2.2 四种模式
OAuth2.0标准定义了四种授权模式: 授权码模式(authorization code) 隐式模式(implicit) 密码模式(password) 客户端模式(client credentials)
四种授权模式中最常用的是授权码模式,例如微信开发平台文档介绍:对于网站应用,微信OAuth2.0授权登录目前支持授权码模式。所以本文只介绍授权码模式,后续文章会通过代码详细比较四种模式。
2.3 整体流程
第一个流程是创建应用,A网站开发者首先去淘宝开放平台创建应用,淘宝开放平台会生成一个client_id作为A网站唯一标识。
第二个流程是授权流程,用户在A网站点击使用淘宝账号登陆时,实际上跳转至A网站拼接授权URL页面,这个页面由淘宝提供。用户在授权页面输入淘宝用户名和密码,校验成功后跳转至A网站回调地址,这时A网站会拿到一个code,后台再使用code去获取access_token。
第三个流程是获取信息,获取到access_token相当于获取到一把钥匙,再按照规范调用淘宝对外提供接口就可以获取到用户数据。
2.4 为什么安全
第一个方面A网站开发人员需要在淘宝开放平台进行申请,需要输入个人信息或者公司信息,这样A网站可靠性有了一定程度保证。
第二个方面在第一章节方案用户需要在A网站输入淘宝用户名和密码,但是在OAuth2.0方案2.4步骤虽然也要输入淘宝用户名密码,但是这个页面由淘宝官方提供,安全性得到了保证。
第三个方面access_token(令牌)并没有在浏览器中传递,而是需要A网站在获取到code之后去后台程序换取,避免了钥匙泄露风险。
第四个方面code(授权码)在浏览器传递有一定风险,但是两个特性一定程度保证了安全性:
(1) code具有效期,超过有效期未使用,需要重新按照授权流程获取
(2) code只能使用一次,使用完成后需要重新按照授权流程获取 3 OpenID Connect3.1 授权与认证
第二章节详细分析了OAuth2.0协议,在实现流程章节分析了创建应用、授权流程、获取信息三个流程,我们发现一个问题:客户端在获取到令牌之后,还需要调用资源服务器接口获取用户信息,有没有一种协议可以在返回令牌时同时将用户信息返回呢?
回答这个问题之前首先对比一组概念:授权与认证。授权关注通信实体有什么权限,认证关注通信实体是谁。OAuth2.0只有授权流程,返回令牌后授权流程完成,OpenID Connect在此基础上进行了扩展,客户端可以通过认证来识别用户。 3.2 三种角色
OpenID Connect定义了三种角色: 最终用户(End User) 依赖方(Relying Party) 身份认证提供商(Identity Provider)
OpenID Connect三种角色交互流程:
第一章节实例对应三种角色:
3.3 整体流程
在2.3章节实现流程步骤2.1拼接授权URL: http://xxx.com/authorize ?response_type=code &client_id=aaa &redirect_uri=bbb.com
使用OIDC需要新增参数scope: http://xxx.com/authorize ?response_type=code &client_id=aaa &redirect_uri=bbb.com &scope=openid%20contacts
欢迎大家关注今日头条号「JAVA前线」查看更多精彩分享文章,主要包括源码分析、实际应用、架构思维、职场分享、产品思考
新加坡旅游列车出现故障,百人聚集顶日步行大倒苦水提示阅读本文约3分钟!昨天,新加坡圣淘沙捷运中午发生故障,数百人卡在怡丰城(VivoCity)站月台而无法通行。故障估计从中午时分开始,大约持续近一个小时。爆料网友称,我大概午间1
帮助孩子有一颗宽容的心研究发现,六个月大的婴儿就能注意到种族和性别上的差别。也就是我们常说的,孩子学会认人了。三岁开始,宝宝会把一些优良品质与自己认为好的那类人挂钩。到了八岁,孩子才会注意到社会对不同人
新加坡旅游列车出现故障,百人聚集顶日步行大倒苦水提示阅读本文约3分钟!昨天,新加坡圣淘沙捷运中午发生故障,数百人卡在怡丰城(VivoCity)站月台而无法通行。故障估计从中午时分开始,大约持续近一个小时。爆料网友称,我大概午间1
屏山峡谷之桃山分谷地图上都百度不到的桃山分谷大家看看是不是比央视推荐的屏山峡谷还美上几分呢?因为跟屏山峡谷一样都位于中国之中的养生鹤峰啊,只不过桃山分谷这名字是我起的呲牙。鹤峰虽然山高路远,但随手拈
屏山峡谷之桃山分谷地图上都百度不到的桃山分谷大家看看是不是比央视推荐的屏山峡谷还美上几分呢?因为跟屏山峡谷一样都位于中国之中的养生鹤峰啊,只不过桃山分谷这名字是我起的呲牙。鹤峰虽然山高路远,但随手拈
昂赛大峡谷里的动物位于三江源国家公园澜沧江园区的昂赛大峡谷有高寒针叶林高寒草甸及高山裸岩等多样的生态系统。长期观察研究显示,峡谷内至少已记录到84只雪豹个体以及12只金钱豹个体,此外,还分布有藏棕熊
昂赛大峡谷里的动物位于三江源国家公园澜沧江园区的昂赛大峡谷有高寒针叶林高寒草甸及高山裸岩等多样的生态系统。长期观察研究显示,峡谷内至少已记录到84只雪豹个体以及12只金钱豹个体,此外,还分布有藏棕熊
十年后再游小七孔小七孔景区位于贵州省黔南布依族苗族自治州荔波县。因响水河上横跨着一座青石砌成的七孔拱桥而得名。2012年,第一次去小七孔,游人稀少,徒步漫游,景色迷人,原生态的山山水水让人流连忘返
十年后再游小七孔小七孔景区位于贵州省黔南布依族苗族自治州荔波县。因响水河上横跨着一座青石砌成的七孔拱桥而得名。2012年,第一次去小七孔,游人稀少,徒步漫游,景色迷人,原生态的山山水水让人流连忘返
多米尼加,普拉塔港体验全包括酒店多年以前,只在古巴体验过一天的全包括酒店,英文是AllInclusive,就是包吃包住的意识,入住这样的酒店,交过住宿费后,所有的餐厅酒吧随便吃,随便喝,不用再另付钱了。这是一种懒
多米尼加,普拉塔港体验全包括酒店多年以前,只在古巴体验过一天的全包括酒店,英文是AllInclusive,就是包吃包住的意识,入住这样的酒店,交过住宿费后,所有的餐厅酒吧随便吃,随便喝,不用再另付钱了。这是一种懒