OAuth20原理图解第三方网站为什么可以使用微信登录

欢迎大家关注今日头条号「JAVA前线」查看更多精彩分享文章,主要包括源码分析、实际应用、架构思维、职场分享、产品思考
1 文章概述假设小明开发了一个A网站,需要支持微信登陆和淘宝账号登陆 。如果你是微信或者淘宝开发人员 , 你会怎么设计这个功能?本文结合淘宝开放平台官方文档以淘宝账号为例 。
从最简单视角去思考,用户在网站A输入淘宝用户名和密码,网站A调用淘宝接口校验输入信息,校验通过则登陆成功 , 整体流程如下图:

OAuth20原理图解第三方网站为什么可以使用微信登录

文章插图
上述思路存在什么问题?最显著问题就是信息安全问题 。问题第一个方面是用户需要将淘宝用户名和密码输入网站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)四种角色交互流程:
OAuth20原理图解第三方网站为什么可以使用微信登录

文章插图
本文场景对应四种角色:
OAuth20原理图解第三方网站为什么可以使用微信登录

文章插图
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相当于获取到一把钥匙,再按照规范调用淘宝对外提供接口就可以获取到用户数据 。
OAuth20原理图解第三方网站为什么可以使用微信登录

文章插图
2.4 为什么安全第一个方面A网站开发人员需要在淘宝开放平台进行申请,需要输入个人信息或者公司信息,这样A网站可靠性有了一定程度保证 。
第二个方面在第一章节方案用户需要在A网站输入淘宝用户名和密码,但是在OAuth2.0方案2.4步骤虽然也要输入淘宝用户名密码,但是这个页面由淘宝官方提供,安全性得到了保证 。
第三个方面access_token(令牌)并没有在浏览器中传递,而是需要A网站在获取到code之后去后台程序换取,避免了钥匙泄露风险 。
第四个方面code(授权码)在浏览器传递有一定风险,但是具有两个特性一定程度保证了安全:
(1) code具有效期 , 超过有效期未使用 , 需要重新按照授权流程获取