oauth2.0是目前最流行的授权机制,用来授权第三方应用,获取用户数据。它有4中授权模式,了解他,对于我们设计API接口很重要。
第一种授权方式:授权码
A向B获取授权码,A获取到授权码之后,根据授权码,向B获取Token,最终我们访问接口都要携带token访问。
通过clientId 和 clientSecret获取授权码
就像QQ第三方的授权就是授权码模式
当你用QQ登录第三方应用,然后重定向到一个网站,让你填QQ号和密码
腾讯返回给有道的资源就包括你的QQ昵称、头像、性别等相关信息及唯一标识openid,不能得到账号密码信息。
第二种方式:隐藏式
A直接从B获取token。这种方式把令牌直接传给前端,是很不安全的。因此,只能用于一些安全要求不高的场景,并且令牌的有效期必须非常短,通常就是会话期间(session)有效,浏览器关掉,令牌就失效了。
第三种方式:密码式
第一步,A 网站要求用户提供 B 网站的用户名和密码。
第二步,B 网站验证身份通过后,直接给出令牌。
这种方式需要用户给出自己的用户名/密码,显然风险很大,因此只适用于其他授权方式都无法采用的情况,而且必须是用户高度信任的应用
第四种方式:凭证式
第一步,A 应用在命令行向 B 发出请求。通过client_id
和client_secret
用来让 B 确认 A 的身份。
第二步,B 网站验证通过以后,直接返回令牌。
关于token,为了防止token被盗用,token是有时效性的,如果token过期,必须要重新生成新的token。
如果让用户重新走一遍上面的流程,再申请一个新的token,很可能体验不好,而且也没有必要。OAuth 2.0 允许用户自动更新令牌。
B 网站颁发token的时候,一次性颁发两个token,一个用于获取数据,另一个用于获取新的令牌(refresh token 字段)。令牌到期前,用户使用 refresh token 发一个请求,去更新token。
推荐阅读