OAuth2授权码模式

OAuth2授权码模式

授权码授权的工作流程图:

OAuth2授权码模式_第1张图片

  1. 前端发送到第三方登录请求
  2. 资源服务器拿到请求后进行重定向并把client_id带上,重定向到第三方授权服务器
  3. 然后在第三方授权服务器拿到请求后进行验证,验证账号密码是否正确
  4. 再然后从前端页面重定向到资源服务器进行登录账号
  5. 登录成功后资源服务器拿到code,再然后资源服务器把带有code、client_id、client_secret的信息重定向发送到第三方授权服务器,向它索要Token
  6. 授权服务器把角色信息和头像图片封装到Token里面,然后颁发封装好的Token令牌到前端用户
  7. 前端用户拿到Token后把Token进行保存,用于方便访问资源服务器,不用反复从第三方授权服务器获取Token,Token过期后就需要删除失效的Token并重新到第三方授权服务器获取新的Token
简单的授权码模式工作流程:
  1. 客户端请求第三方授权
  2. 用户(资源拥有者)同意给客户端授权
  3. 客户端获取到授权码,请求认证服务器申请 令牌
  4. 认证服务器向客户端响应令牌
  5. 客户端请求资源服务器的资源
  6. 资源服务器返回受保护资源作者

密码模式和授权码授权模式的区别:

密码授权和授权码授权最大的区别是授权码模式多了一个授权码环节

密码授权模式:

需要有五个参数
1.client_id,2.client_secret,3.用户 username,4.密码 password,5.grabt_type password
OAuth2授权码模式_第2张图片

密码模式是直接把用户名和密码交给授权服务器了,密码授权模式只有两个流程:
一、根据用户名密码等参数直接获取token,通过 /oauth/token 请求获取access_token
二、根据token,访问资源

用密码模式登录的用户一般是非常信任该应用的(比如腾讯公司的QQ和微信登录对于用户而言是非常受信任的公司)

授权码模式:

需要六个参数:

1.grant_type 2.code 3.scope 4.client_id 5.client_secret 6.redirect_uri

grant_type:授权类型,填写authorization_code,表示授权码模式
code:授权码
scope:表示申请的权限范围,可选项
scop:客户端范围,和授权配置类中设置的scop一致。
client_id:客户端id,和授权配置类中设置的客户端id一致。
client_secret:客户端密钥
redirect_uri:跳转uri,当授权码申请成功后会跳转到此地址,并在后边带上code参数(授权码)。

OAuth2授权码模式_第3张图片

授权码模式是功能最完整、流程最严密的授权模式,通过客户端的后台服务器,与第三方的授权服务器进行互动,授权码模式有三个流程:
一、客户端请求第三方登录认证,第三方授权服务器进行授权,返回授权码
二、客户端拿到授权码后,请求授权服务器授权令牌,最后返回Token令牌
三、客户端拿到令牌后,访问资源服务器

总结:

授权码模式相对于密码模式更加复杂,需要获取授权码,然后通过授权码获取Token,然后再通过Token获取想要访问的资源,相比于密码模式,授权码模式更加安全,因为无法直接通过账号密码获取Token,需要先获取授权码,然后进行重定向到第三方授权服务器(携带code等参数),且授权码具有时效性,必须再15秒内完成重定向申请Token令牌,否则授权码会失效。

你可能感兴趣的:(oauth2)