Oauth2.0了解

Oauth2.0
一、名称解释
(1)客户端(Client):应用,如微信小程序,Steam游戏。
(2)资源所有者(Resource Owner):用户,如微信用户,Steam用户。
(3)资源服务端(Resource Server):微信服务端,Steam各业务域服务器。
(4)授权服务端(Authorization Server):如微信授权服务端,Steam开放平台授权服务端。
(5)用户代理(User Agent):用户面向的窗口,客户端表现形式,如微信小程序,Steam游戏的网页、Unity、Android、IOS(都有对应SDK封装调用开放平台授权接口)。
二、工作目标
客户端通过用户代理,在资源所有者面向授权服务器授权后,可以访问资源服务器。简单讲,就是用户授权指定应用后,应用可以访问平台的用户数据。
三、使用场景
(1)各种单点登录,如QQ登录,微信登录。
(2)平台应用,如微信小程序,支付宝小程序,Steam游戏,Steam游戏。
四、四种模式
(1)授权码模式(Authorization Code)

<1>授权(应用客户端请求授权服务端):
传入用户标识uid、应用标识appKey,返回授权码code。
code由uid、appKey、appSecret、过期时间戳生成。
有效期5分钟。
<2>申请访问令牌和刷新令牌(应用服务端请求授权服务端):
传入授权码code、应用标识appKey、应用密钥appSecret,返回访问令牌accessToken、刷新令牌refreshToken、过期时长、用户在应用下的标识openId。
code解析出uid、appKey、appSecret、过期时间戳。
appKey、appSecret校验应用服务端真实性。
过期时间戳校验请求有效性。
accessToken由uid、appKey、appSecret、过期时间戳生成。
有效期2小时。
refreshToken由uid、appKey、appSecret、过期时间戳生成。
有效期30天。
openId由uid和appKey生成。

<3>访问开放平台接口(应用服务端请求授权服务端,校验通过后请求业务域服务端):
传入访问令牌accessToken。
accessToken解析出uid、appKey、appSecret、过期时间戳。
appKey、appSecret校验应用服务端真实性。
过期时间戳可以校验请求有效性。
uid识别用户。
<4>刷新访问令牌(应用服务端请求授权服务端):
传入应用标识appKey、刷新令牌refreshToken,返回访问令牌accessToken、刷新令牌refreshToken、过期时长、用户在应用下的标识openId。
refreshToken解析出uid、appKey、appSecret、过期时间戳。
appKey、appSecret校验应用服务端真实性。
过期时间戳可以校验请求有效性。
重新生成accessToken和refreshToken。
思考1:为什么授权后不直接返回访问令牌?
访问令牌存储在客户端,泄漏风险高。
思考2:为什么授权后不通知客户端授权成功,同时根据配置的接口通知应用服务端访问令牌和刷新令牌?
使授权服务端低延迟,减轻授权服务端压力。
思考3:为什么授权码有效期很短?
减小授权码在客户端的泄漏风险。
思考3:为什么访问令牌有效期短?
减小泄漏后的风险。
思考4:为什么不直接传访问令牌来续期?为什么刷新令牌有效期长?
使用访问令牌续期会造成用户频繁授权,而刷新令牌有效期长,可以避免用户频繁授权。
思考5:为什么刷新时不再次传入密钥,提高应用服务端真实性?
刷新是较为频繁的操作,传入密钥会增加泄漏风险。
思考6:申请令牌时,如何避免密钥暴露?
申请访问令牌和刷新令牌时,传入密钥参与的签名,不把密钥暴露在传输中,减小密钥泄漏风险。
(2)简化模式(Implicit)
应用客户端传入uid、appKey获取访问令牌和过期时长。
应用没有服务端时使用。Steam游戏如果没有服务端,采用这种方式。
访问平台能力,和用户无关,如申请房间,使用的accessToken由appKey和appSecret生成,也无需授权码参与。
(3)密码模式(Resource Owner Password Credentials)
用户在对应用客户端高度信任的情况下,向应用客户端提供用户名和密码,应用客户端靠用户名和密码获得授权服务端授权。
(4)客户端模式(Client Credentials)
应用客户端直接向授权服务端请求访问令牌。
五、扩展方向
(1)unionId
同一个开发者账号有下有多个应用,申请令牌后可以返回unionId,由uid和账号Id生成,是同一个用户跨应用的公用标识。
(2)scope
授权时可以细化到具体的业务域,申请令牌后可以返回scope,表明此时授权的一个或多个业务域。
(3)Oauth1.0
机制:应用端获取requestToken,用户授权后,应用端用授权后的requestToken获取访问令牌。
访问令牌可以存储到一年或一年以上,没有刷新机制。只支持http,不支持https。
(4)安全性
传输安全,如使用SSL防拦截获取和加签防篡改。
客户端安全存储,如授权码、访问令牌加密存储。
应用服务端安全存储,如应用密钥加密存储,甚至应用标识加密存储。
密钥生成的随机性,如16位随机数。
访问安全性,如应用访问业务域限制,甚至域内接口访问限制。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

风铃峰顶

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值