OAuth是一种授权机制,数据的所有者向第三方系统颁发短期的令牌token,用来代替密码。OAuth2.0详细规定了如何颁发令牌。一共有四种授权类型,适用于不同的场景。
token的特点:
(1)token是短期的,到期自动失效,用户自己无法修改(2)token可以被数据所有者撤销,撤销后立即失效(3)token有权限范围scope
四种授权类型
(1)授权码 authorization code 流程:第三方应用先申请一个授权码,再用该码获取令牌。 最常用的流程,安全性最高,适用于有后端的Web应用,所有与资源服务器的通信都在后端完成,可以避免令牌泄露。
(2)隐藏式 implicit
直接向前端颁发令牌,没有授权码这个中间步骤。
适用于纯前端应用,没有后端,此时必须将令牌存储在前端。这种方式只适用于安全要求不高的场景,且令牌有效期必须非常短,通常就是会话期间有效。
(3)密码式 password
流程:第三方应用拿到用户的用户名和密码,使用密码申请令牌。
这种方式需要提供用户名密码,风险很大,只适用于其他授权方式都无法使用的情况,且必须是用户高度信任的应用。
(4)客户端凭证 client credentials
流程:第三方应用使用clientId和client secret申请token
适用于没有前端的命令行应用,
令牌的使用
在请求第三方应用时,在请求的header中加上Authorization字段,传入token
令牌的更新
OAuth2.0允许用户自动更新令牌。具体方法是,在颁发令牌时,一次性颁发两个,一个用于获取数据,一个用于获取的新的令牌refresh_token。在令牌到期前,使用refresh_token去申请新令牌即可(grant_type=refresh_token)