如需转载,标记出处
一、OAuth2.0 流程详细拆解
OAuth2.0 就是让用户授权第三方应用访问自己的数据,但不告诉第三方自己的账号密码的安全机制。
用户授权 (获取 Authorization Code)
你的网站引导用户点击 QQ登录 按钮。
用户跳转到 QQ 登录页面,输入账号密码,并授权。
QQ 登录成功后,把 Authorization Code 发回你的网站(回调地址带着 code)。
用 Authorization Code 换取 Access Token
·你的网站服务器收到 code 后,携带 code + appid + appsecret 去 QQ 服务器换取 Access Token。
使用 Access Token 获取用户信息
你的网站拿到 Access Token 后,去 QQ 的用户接口获取用户信息+openid。
(可选) 用 Refresh Token 换新 Access Token(续期)
Access Token 有效期一般 60 天左右,过期就不能用了,需要续期。
拿 refresh_token 去换新的 access_token。
二、OAuth2.0 流程总结图
用户授权(Authorization Code)
↓
你的服务器用Code换Token(Access Token)
↓
你的服务器用Token获取用户信息+openid
↓
(Token过期时可用 Refresh Token 续期)
三、问题集
1.OAuth2.0 为什么要Code 和 Token,只用一个不行吗
攻击者可以伪装成客户端浏览器页面,引导用户去授权,拿到code
名字 | 本质 | 作用 | 流程位置 |
---|---|---|---|
Authorization Code | 临时授权码** | 证明用户允许你操作他的QQ账号信息,但它不能直接访问用户数据。需要拿它去换Access Token。 | 登录成功后,临时返回给你 |
Access Token | 通行证 | 拿到后,你的网站才可以去调用QQ开放的接口(比如获取用户信息),是实际访问数据的钥匙。 | 你网站拿 Code 去换来的 |
Authorization Code:
用户同意授权给你后,QQ给你一张 授权凭证,相当于 "临时纸质通行证",你拿着这个临时证去官方窗口(QQ服务器)换真正的 Access Token。
官方窗口(QQ服务器)确认你没问题,发给你一张 可以开门访问用户数据的钥匙(Token)。
下面是QQ官网文档(仅截取部分信息用来讲解)
你需要包含这两个值才能拿到code
而要拿到token的条件,需要带着下面的几个
多了一个client_secret,就是应用的 "密码",跟你登录网站用的密码一样,是平台(分配给你开发的应用的密钥,用来证明“你是谁”。当你开发一个网站或者App,需要接入第三方平台(比如QQ登录),平台为了识别你,会给你一对:
appid(你是谁)
appsecret(用来验证你说的身份)
只有你的网站服务器持有 client_id 和 client_secret 才能用 Authorization Code 换 Access Token
就算被人拿到Code,他不知道你的appsecret,也拿不到token。Token 本身 是明文返回给你。
但这个明文是在 HTTPS加密隧道 里传输的,外面有一层 SSL/TLS加密,别人无法看到里面的内容。