一文搞懂OAuth2.0

OAuth2.0是什么?

OAuth 2.0 是目前最流行的授权机制,一般用来授权第三方应用,获取用户数据。

四种角色

Oauth一共定义了四种角色:
1.资源所有者(Resource Owner):用户本身
2.资源服务器(Resource Server):存储受保护的信息 (应用的一个后台服务)
3.授权服务器(Authorization Server):在成功验证用户身份,并获得授权后,给客户端派发访问资源令牌(也是应用的一个后台服务,专门用来做授权而已)
4.客户端(Client):你使用的APP(比如微信、QQ)或第三方应用(需要使用微信、QQ授权用户信息或授权登录的应用)

四种授权方式

oauth2提供4种授权方式,分别是
授权码(authorization-code)
隐藏式(implicit)
密码式(password)
客户端凭证(client credentials)

授权码(authorization-code)

这种模式应该是最常用的,且是最安全的。

应用场景

使用第三方app时授权用户信息。

流程

1.你想玩一款游戏,然后该游戏支持新注册一个用户和使用微信登录。你为了方便,选择使用微信登录。

2.此时该游戏APP后台会请求授权服务器(附上回调URL),游戏界面会跳转到微信授权页面,提示你需要向该游戏授权你的个人信息,例如用户昵称,手机号,好友信息等(这些其实就是需要做授权保护的资源)。

3.你点击确定,确认授权这些信息给该游戏

4.微信的授权服务器将通过调用游戏APP请求中的回调URL,向该游戏颁发一个授权码

5.游戏APP获取到授权码,使用授权码请求微信的授权服务器。

6.微信授权服务器确认授权码有效后,调用回调URL,返回一个可用的令牌。

7.游戏APP携带令牌向微信资源服务器请求你的微信用户信息,后续为你在游戏中提供微信好友是否在线等信息。

在这里插入图片描述

隐藏式(implicit)

也被称作简化模式,它与授权码模式差不多,只是少了一个使用授权码获取token的操作。不通过第三方应用程序服务器,直接在浏览器中向授权服务器申请令牌。

应用场景

由于授权码模式需要第三方应用有后台服务器的支持,但是有时第三方应用可能只有web端。这种情况下就可以使用简化模式。

流程

1.你登录一个网页,该网页需要你提供你的微信账号某些信息的授权。

2.此时该网页会请求授权服务器(附上回调URL),跳转到微信授权页面,提示你需要向该游戏授权你的个人信息,例如用户昵称,手机号,好友信息等(这些其实就是需要做授权保护的资源)。

3.你点击确定,确认授权这些信息给该网页

4.微信的授权服务器将通过调用请求中的回调URL,直接向该游戏颁发一个令牌(与授权码模式不同,此处直接给令牌,而非授权码)

5.网页携带令牌向微信资源服务器请求你的微信用户信息,提供相关服务。

密码式(password)

密码模式是用户直接将自己的用户名密码交给你所使用的APP,APP使用你的用户名密码直接换取AccessToken。

应用场景

手机APP和网站基本都是需要这种模式登陆的,非常常用。但是一般情况下,APP和网站与授权服务器、资源服务器都是同一个产品的。

不是同一个产品的例子是火车票抢票软件,这种情况其实有两个原因,一个是你信任这些抢票软件,另一个原因是12306没有开放授权码模式给第三方APP(因为12306想让大家自己抢啊,防止服务器压力过大,并且由于很多人不会使用抢票软件,这样使用抢票软件其实是破坏了公平的。)

流程

1.用户在APP或网站上输入用户名和密码

2.授权服务器验证用户名密码正确后,返回令牌给APP或网站

3.APP或网站携带令牌访问资源服务器

客户端凭证(client credentials)

应用场景

适用于内部系统之间的验证,应用维度的共享资源,不需要用户授权,适合后台服务间的认证和访问。严格来说,客户端模式并不属于oauth框架所要解决的问题,在这种模式下,已经与用户没有关系了,单纯的数据客户端以自己的名义要求资源提供商提供服务,不存在授权问题。

流程

第一步,A 应用在命令行向 B 发出请求。

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

上面 URL 中,grant_type参数等于client_credentials表示采用凭证式,client_idclient_secret用来让 B 确认 A 的身份。

第二步,B 网站验证通过以后,直接返回令牌。

这种方式给出的令牌,是针对第三方应用的,而不是针对用户的,即有可能多个用户共享同一个令牌。

参考链接:

https://blog.youkuaiyun.com/Huang_Ds/article/details/125533523

https://www.ruanyifeng.com/blog/2019/04/oauth-grant-types.html

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、付费专栏及课程。

余额充值