03 | 授权服务:授权码和访问令牌的颁发流程是怎样的?
授权服务的工作过程
- 深入了解
- 翻译
- 解释
- 总结
OAuth 2.0授权服务的核心在于颁发授权码和访问令牌,涉及第三方软件注册、请求访问范围、授权码和访问令牌的关键操作。在颁发授权码过程中,授权服务进行了准备工作,包括验证基本信息、权限范围和生成授权请求页面。经过用户授权后,授权服务验证权限范围、处理授权请求生成授权码,并重定向至第三方软件。这一过程强调了对权限范围的重视和合法性校验,以及授权码的临时性和有效期。整个流程突出了OAuth 2.0的安全性和权限控制特点。 在颁发访问令牌过程中,授权服务验证第三方软件是否存在,验证授权码的合法性,并生成访问令牌。访问令牌的生成需要符合唯一性、不连续性和不可猜性的原则,通常使用UUID来实现。访问令牌还需要与第三方软件的应用标识和资源拥有者标识进行关系映射,并设置过期时间。文章还介绍了结构化令牌(JWT)的概念。 刷新令牌的颁发和使用与访问令牌类似,但刷新令牌的存在是为了在访问令牌失效时,通过系统重新请求生成一个新的访问令牌,避免用户频繁手动授权。刷新令牌和访问令牌一起生成,并在使用时需要验证基本信息并重新生成访问令牌。 总之,本文详细介绍了OAuth 2.0授权服务的核心流程,包括授权码和访问令牌的颁发,以及刷新令牌的概念和使用。读者通过阅读本文可以快速了解OAuth 2.0授权服务的技术特点和流程,为理解授权流程代码和搭建授权服务提供了清晰的指导。OAuth 2.0的安全性和权限控制特点得到了充分展现,为读者提供了深入理解和应用该技术的基础。
《OAuth 2.0 实战课》,新⼈⾸单¥29
全部留言(80)
- 最新
- 精选
- 约书亚在上一节回答留言时,老师提到,用refresh刷新access时,如果access没过期,那会给这个access续期而不会重新生成? 这节课没提到这个。请问这是oauth规定的么?或者一般都这样实现? 因为我感觉无限续期会增加access被破解的风险
作者回复: 感谢 约书亚 指正 我翻看了 之前的回复 做了修改。 1、:若access_token未超时,那么进行refresh_token有两种方式,(1)不会改变access_token,但超时时间会刷新,相当于续期access_token(2)更新access_token的值,我们建议【统一更新access_token的值】。 2、延期access_token并不是一个最好的方式,尽管有的开放平台是这么做的。 3、在我们这节课中,我们是提到了这点,本文中的描述是:【用来通过系统重新请求生成一个新的访问令牌】 而且咱们这节课的建议也是更换一个新的访问令牌。 4、“因为我感觉无限续期会增加access被破解的风险” 刷新令牌也有有效期。
2020-07-05314 - 申玉宝为什么要 通过刷新令牌让第三方不断刷新token有效期,而不是直接给访问token一个更长的有效期?后者更简单
作者回复: 为了安全性的考虑,是不可以让“token一个更长的有效期”存在的。
2020-07-05129 - 哈德韦请问什么是 rscope?和上下文中的 scope 是一回事吗?这个 r 代表什么?
作者回复: 对应的权限 都是同一个权限,这里用rscope是受保护资源服务再次确认的权限,r是replay。
2020-07-0527 - 永旭当第三方软件的访问令牌过期, 触发了刷新令牌的刷新, 从新生成访问令牌和刷新令牌, 这是过期时间又被重置. 如此循环是不是说, 永远不会过期啊 ??
作者回复: refresh_token过期时间不会重新刷新
2020-11-0946 - Harvey既然第三方软件需要先在授权服务上注册,那为什么不在注册时直接把回调地址也注册了,这样不是更安全?
作者回复: 第三方应用在平台上面注册的时候,包含回调地址。
2020-07-0685 - Ryan Pan请问为什麽刷新令牌用过了一定要废除呢? 有过期时间的话其实也可以用同一个来产生访问令牌不是吗? 还有想问一般来说刷新令牌的期限会设多久呢?
作者回复: 当刷新令牌被使用过,授权服务可以自行决定是否颁发新的刷新令牌来替换旧的,我们的建议是生成新的。 refresh_token 的有效期具体多长时间,同样在OAuth 2.0 规范里面并没有给出确定值,一般比 access_token 的有效期长1-7天。
2020-07-055 - AA淘宝的refresh_token也有过期时间,通过refresh_token刷新后,返回来assessToken和refresh_token,但refresh_token过期时间不会重新刷新,这是为什么要这样设置呢,当refresh_token为0时,是不是只能通过重新登录授权
作者回复: 是的,当刷新令牌也过期了,只能重新登录再授权。
2020-07-0465 - 暖色浮余生刷新令牌有过期时间吧,不过一般设置的时间比较长。反正微信公众号的挺长的,还有一直不明白 scope的 权限范围指的是一个什么样的范围
作者回复: SCOPE的权限范围非常重要,OAuth 2.0 本着【最小权限范围】原则,来支持用户对第三方软件授权。比如小兔打单软件,他的主要“行当”就是帮助小明打印订单,那么它的权限范围就是调用跟订单打印相关的API,比如单条查询订单API、批量查询订单API,那么查询小明店铺其它的API就要受限,在小兔打单软件申请成为开放平台的应用的时候就要做一次权限范围的选择,另外,当小明给小兔进行授权的时候,也会让小明去选择并确认,总之就是不要让小兔打单软件有超过其正常权限的范围,来充分保护小明店铺的数据。后面的课程,我们还会详细讲解关于SCOPE的种类和用法。
2020-07-0425 - 唐朝农民String appStr = refreshTokenMap.get("refresh_token"); if(!appStr.startsWith(appId+"|"+"USERTEST")){//该refresh_token值 不是颁发给该 第三方软件的 return; } 有一点不是很明白,授权服务是一个平台,不可能针对“小明”一个用户,那么在验证refresh_token时肯定不能硬编码成“USERTEST”,而是从上下文中获取的,请求这个用户ID 是 怎么传递的呢?
作者回复: 在实际生产环境中,这个用户ID是不需要传递的也不可能被传递,因为OAuth 2.0的目的之一就是不让第三方软件接触到用户ID。 第一次跟用户ID有关系的时候就是在用户给第三方软件授权的时候,这个时候如果用户没有登录就会先登录再授权,这一切都是发生在平台的一方,所以平台能够拿到用户的ID,继而在给第三方软件生成访问令牌的时候,就可以让这个访问令牌access_token的值跟第三方软件的app_id和用户ID做一个映射关系,同理refresh_token的生成也是一样的,并且refresh_token和access_token是一起生成并返回给第三方软件。 我们在代码中为了演示refresh_token和access_token的生成都是在app_id和用户这个粒度的,是“特意”固定写死了一个USERTEST值。
2020-07-123 - 马成刷新令牌和授权码的处理机制感觉非常相似。只是code是第一次生成的,刷新令牌是后续生成的,功能都是换取访问令牌。我觉得这里还有一个点没说,就是在访问令牌有效期的前半段时间,使用刷新令牌换取的访问令牌是不变的。想问一下设计上可不可使用访问令牌来换取新的访问令牌?
作者回复: 1.刷新令牌和授权码完全两个东西 2.刷新令牌换回来的访问令牌一定是变的 3.不可以,有2所以3不成立 对于第2点,可能是马成看了上节课的留言回复,当时有不准确的描述,我已修改,最好的方案是:更新访问令牌的值,这也是咱们这节课给出的建议【用来通过系统重新请求生成一个新的访问令牌】。 “若access_token未超时,那么进行refresh_token有两种方式,(1)不改变access_token,但超时时间会刷新,相当于续期access_token(2)更新access_token的值,我们建议【统一更新access_token的值】”
2020-07-0543