首页 > 其他 > 详细

OAuth2.0 四种授权方式

时间:2020-09-02 13:04:32      阅读:35      评论:0      收藏:0      [点我收藏+]

【什么是OAuth】

OAth是一种授权机制。数据所有者授权第三方应用获取一定权限。数据所有者产生一个代替密码的令牌(token)供第三方应用使用。

比方说,我想使用QQ快捷登录一个应用,但我又不想我的账号密码泄露。那么使用OAuth2.0我登录QQ验证了自己的身份,然后QQ便发送一个token给应用,

应用登录。应用获取到token的同时,可能还会获得头像,昵称等(但密码不会泄露)

 

【token与密码的区别】

1.token是短期的,会过期,密码不修改不会过期

2.token可撤销,密码只能修改不能撤销

3.token有权限范围,他只能获取一定权限,而密码则是所有

 

【四种授权方式】

一.授权码

第三方应用首先申请一个授权码,通过授权码获取相关权限

 

步骤:

1.A网站提供一个B网站的链接让用户登录

https://b.com/oauth/authorize?
  response_type=code&
  client_id=CLIENT_ID&
  redirect_uri=CALLBACK_URL&
  scope=read
redirect_uri表示登录之后跳转的页面,
client_id表示请求对象
code表示是以授权码的形式
scope表示授权范围(只读)

2.用户在B网站登录之后,返回授权码

https://a.com/callback?code=AUTHORIZATION_CODE

code就是授权码

3.A网站拿到授权码之后就可以向B网站发送请求,获取令牌

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确认请求对象的身份
grant_type表示认证方式是授权码
code就是获取的授权码
4.B网站接受请求在之后,就会以json形式发送token
{    
  "access_token":"ACCESS_TOKEN",
  "token_type":"bearer",
  "expires_in":2592000,
  "refresh_token":"REFRESH_TOKEN",
  "scope":"read",
  "uid":100101,
  "info":{...}
}

access_token就是要获取的token

 

 

二. 隐藏式

 不使用授权码(没有后端接收,只在前端),直接获取token

 

步骤:

 1.A网站提供一个B网站的链接让用户登录

https://b.com/oauth/authorize?
  response_type=token&
  client_id=CLIENT_ID&
  redirect_uri=CALLBACK_URL&
  scope=read

直接让响应的类型为token

 

2.登录成功之后跳转A网站

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

这里token在URL锚点位置,而不是和上面一样附在请求头。因为锚点不会发送到服务器

 

但这样不安全,因为直接返回到前端,显示在锚点上面

 

三. 密码式

直接使用你的账号密码申请token

 

 1.A网站提供一个B网站的链接让用户登录

https://oauth.b.com/token?
  grant_type=password&
  username=USERNAME&
  password=PASSWORD&
  client_id=CLIENT_ID

 

 2.直接获取token,这里没有跳转,拿到token之后以json的形式使用http回应

必须对应用高度信任

 

四. 凭证式

试用于没有前端的应用

 

步骤:

1.A应用向B发送请求

https://oauth.b.com/token?
  grant_type=client_credentials&
  client_id=CLIENT_ID&
  client_secret=CLIENT_SECRET

2.验证通过之后,直接返回令牌

针对第三方应用,共用token

 

拿到token之后以后向B网站请求数据都必须在请求头带上token,

curl -H "Authorization: Bearer ACCESS_TOKEN" \

 

 

【更新token】

方法:向B网站请求两个token,一个用于登录,一个用于更新

https://b.com/oauth/token?
  grant_type=refresh_token&
  client_id=CLIENT_ID&
  client_secret=CLIENT_SECRET&
  refresh_token=REFRESH_TOKEN

 

 

 

OAuth2.0 四种授权方式

原文:https://www.cnblogs.com/AduBlog/p/13597603.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!