OAuth2.0授权码登录详解
下面是好好范文网小编收集整理的OAuth2.0授权码登录详解,仅供参考,欢迎大家阅读!
一、概述
我们平时登录各种网站时都会用到第三方账号登录,比如qq账号授权登录、GitHub账号授权登录等等,那么究竟是怎么实现的第三方账号登录的呢,其实就是通过OAuth2.0的机制
接下来的叙述都以微信登录同程旅行为例,先看下授权登录用户操作流程
1.用户先点击微信登录
2.弹出授权框点击同意后登录成功
二、
OAuth2.0 重要的参数
(1)code码:
用户点击微信登录时,同程的客户端会调用微信提供的授权组件弹出授权框,当用户点击授权,那么微信组件将会申请一个code码给到同程客户端,该code码为一次性,使用过后将会失败
(2)accessToken
同程客户端通过code获取的具有时效性的accessToken,一般为两小时有效,调用微信其他api必须携带该token
(3)client_id在应用申请时微信开放平台给同程分配的唯一client_id
(4)client_secret应用申请时微信开放平台给同程分配的唯一秘钥,所有请求必须携带,以此来保证token不被恶意攻击
(5)refresh_token(目前很多公司都废弃掉了,无需刷新每次都获取新的)
顾名思义用于刷新token,当token过期可以用这个直接获取新的而不用完整的走一遍授权流程
三、授权码授权登录流程
1.用户点击微信账号登录
2.同程客户端调用微信提供的授权组件弹出用户授权框,询问用户是否授权
3.用户点击同意授权后生成的code
4.同程客户端请求同程服务端并携带code
5.同程服务端调用微信获取accessToken的api并携带code、client_id、client_secret
6.微信服务端校验通过后,返回accessToken、refresh_token给同程服务端
7.同程服务端使用token调用微信其他api获取到所需的用户信息完成登录
四、OAuth2.0登录的四种方式
刚刚我们已经提到了授权码授权登录,这种方式是最常用的登录方式因为安全性比较高,不过OAuth2.0其实还有其他三种
1.授权码
上面已详细讲过
2.隐藏式
上边提到有一些Web
应用是没有后端的, 属于纯前端应用,无法用上边的授权码模式。令牌的申请与存储都需要在前端完成,跳过了授权码这一步。
前端应用直接获取 token
,response_type
设置为 token
,要求直接返回令牌,跳过授权码,微信授权通过后重定向到指定 redirect_uri
3.
密码式
密码模式比较好理解,用户在同程直接输入自己的WX
用户名和密码,同程拿着用户信息直接去微信申请令牌token,请求响应的 JSON
结果中返回 token
。grant_type
为 password
表示密码式授权。
4.凭证式
凭证式和密码式很相似,主要适用于那些没有前端的命令行应用,可以用最简单的方式获取令牌,服务端直接通过client_id、client_secret请求第三方服务端,第三方服务端在请求响应的 JSON
结果中返回 token
。