OAuth2.0的四种授权方式

简介

OAuth2.0是一种授权机制,主要核心是向第三方应用颁发令牌(token)。有四种授权方式:授权码,隐藏式,密码式,凭证式。

一. 授权码

指先向第三方应用申请一个授权码,然后再用该码获取令牌。
该方式最常用也最安全,适用于有后端的应用。授权码通过前端获取传送,后端获取存储令牌,并且与第三方的通信都通过后端完成。这样可以避免令牌泄露。
典型应用:第三方登录
1.应用A跳转到第三方应用B,B应用要求用户登录,并且询问是否授权给A应用,同意后,跳回A指定的回调地址,同时传回授权码。

//A应用跳转B应用的链接示例https://b.com/oauth/authorize?  response_type=code&  client_id=CLIENT_ID&  redirect_uri=CALLBACK_URL&  scope=read
/*
response_type参数表示要求返回授权码(code)
client_id参数让 B 知道是谁在请求
redirect_uri参数是 B 接受或拒绝请求后的跳转网址
scope参数表示要求的授权范围(这里是只读)
*/
//授权成功后,B回调A的示例
https://a.com/callback?code=AUTHORIZATION_CODE

2.A应用收到授权码后,后端向B应用请求令牌(token),示例如下:

https://b.com/oauth/token? client_id=CLIENT_ID& client_secret=CLIENT_SECRET& grant_type=authorization_code& code=AUTHORIZATION_CODE& redirect_uri=CALLBACK_URL 
/*
client_id参数和client_secret参数用来让 B 确认 A 的身份
(client_secret参数是保密的,因此只能在后端发请求)grant_type参数的值是AUTHORIZATION_CODE,表示采用的授权方式是授权码code参数是上一步拿到的授权码
redirect_uri参数是令牌颁发后的回调网址
*/ 

3.B应用向A应用请求令牌的回调地址颁发令牌,requestBody示例如下:

{
      "access_token":"ACCESS_TOKEN", 
      "token_type":"bearer",    
      "expires_in":2592000,    
      "refresh_token":"REFRESH_TOKEN",    
      "scope":"read",    
      "uid":100101,    
      "info":{...}  
}

二. 隐藏式

允许直接向前端颁发令牌,这种方式没有授权码这个中间步骤,所以称为隐藏式。
适用于纯前端应用,不安全。示例如下,token是作为锚点,由于OAuth2.0允许跳转网址是Http协议,存在"中间人攻击"的风险,而锚点是不会发送到服务器的,所以减少了泄露令牌的风险。

https://a.com/callback#token=ACCESS_TOKEN

注:这种直接把令牌发送给前端的方式是很不安全的,因此只适用于一些安全性要求不高的场景,而且token的有效期必须非常短,通常是会话期间(session)有效。

三. 密码式

**指用户直接用B应用的密码在A应用上登录。**一般只适用于绝对信任的应用之间,如:同公司的不同应用。

四. 凭证式

适用于没有前端的纯后端应用。
A应用直接在命令行(或其他非前端方式)向B应用请求令牌,B应用验证通过后直接返回令牌。示例如下:

https://oauth.b.com/token?
  grant_type=client_credentials&  
  client_id=CLIENT_ID&  
  client_secret=CLIENT_SECRET
  /*
  grant_type参数等于client_credentials表示采用凭证式
  client_id和client_secret用来让 B 确认 A 的身份
  */

该方式颁发的令牌是针对应用,而非某个用户。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值