什么是oAuth2

oAuth是一个关于授权的开放网络标准,用来授权第三方应用,获取用户的数据。其最终的目的是为了给第三方应用颁发一个有时效性的令牌access_token,第三方应用根据这个access_token就可以去获取用户的相关资源,如用户显示名称,email这些信息。

OAuth 2.0基本授权机制:

  • 客户端(应用程序)请求资源所有者(用户)的授权。
  • 资源所有者同意给予应用程序授权,客户端收到授权准许。
  • 客户端使用上一步获得的授权,向认证服务器申请令牌。
  • 认证服务器对客户端进行认证以后,确认无误,同意发放令牌。
  • 客户端使用令牌,向资源服务器申请获取资源。
  • 资源服务器确认令牌无误,同意向客户端开放资源。

OAuth2授权模式:授权码模式、隐藏式授权模式、用户名密码模式、客户端模式

OAuth 2.0的两种授权模式时序图
在这里插入图片描述
隐式授权模式需要注意的一点是Auth Server通过重定向链接(Location Header)返回的access_token是通过hash的形式返回的, 而不是像授权码模式中授权码一样是通过query返回的.
通过query返回的形式是:
https://client.com/oauth/callback?code=2YotnFZFEjr1zCsicMWpAA&state=xxxx
通过hash返回的形式是:
http://client.com/oauth/callback#access_token=ya29GAHES6ZSzX&token_type=Bearer&expires_in=3600
二者的区别在于query使用?+参数, hash使用#+参数. 前者的参数会随请求一起发送到uri对应的主机(即client.com服务器), 且参数存在于request url中, 会出现在后台请求日志中. 但后者实际是利用到fragment url特性(通常用作页内跳转锚), #后的数据只会保留在浏览器中, 不会发往服务器, 因为参数不会传递到服务器, 因此就不会被拦截窃取.
由于隐式授权模式从Auth Server通过重定向得到的access_token仅保留在浏览器中, 因此应用后台想要获取它就只能在浏览器请求回调链接(即client.com)的时候向浏览器返回一段js脚本(通常包裹在html中), 由这段脚本获取hash参数, 然后发送给应用后台, js发送access_token的时候可以使用post请求提高安全性.
因此虽然隐式授权模式不能像授权码模式一样通过应用后台的post请求拿到access_token, 做到高度安全性, 但在access_token从浏览器发往应用后台的过程中, 也能一定程度保证数据安全性.
参考链接: https://www.ruanyifeng.com/blog/2014/05/oauth_2_0.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值