OAuth2.0 授权服务做了什么

在授权码许可流程中,有一个很重量的角色就是授权服务,它负责授权码和访问令牌的颁发和使用。

提供第三方注册平台

在颁发授权码之前,授权服务需要提供一个平台供第三方软件注册,包括client id, client secret,redirect link和能访问的权限范围(scope)等

颁发授权码

在第三方软件引导用户跳转到授权服务时,在用户看到授权页面前,授权服务会先进行以下的校验

1. 校验用户是否合法(用户可能需要输入用户名和密码进行登陆验证)

2. 校验第三方软件是否合法(曾经注册过),同时跳转时传入的redirect link是否是之前注册过的(避免浏览器伪造)

3. 校验第三方软件请求的权限范围scope是否在之前注册的scope内。

校验通过后,会返回授权页面到前端,用户在授权页面上可以进一步选择第三方软件可以访问的权限范围(比如只能获取名字等)

在用户选完授权范围,点击授权后,授权服务就开始了生成授权码的操作

1. 再一次校验传入的权限范围是否在第三方软件注册时的范围之内

2. 校验响应类型 response_type 的值是否时code,是的话,生成授权码

3. 保存授权码,第三方软件和应用之间的关系。同时保持授权码和scope之间的关系

4. 给授权码设置有效期,OAuth 2.0 规范建议授权码 code 值有效期为 10 分钟,并且一个授权码 code 只能被使用一次。

5. 重定向到第三方软件。

颁发访问令牌

当第三方软件后台通过授权码获取访问令牌时,授权服务要进行以下步骤

1. 验证第三方软件提供的client id和client secret

2. 确认授权码是否有效

3. 生成访问令牌(Access Token)。OAuth 2.0中并没有规定Access Token的格式,但是规定了要符合三个原则:唯一性,不可连续性和不可猜性。

4. 保存Access Token,第三方软件和应用之间的关系。同时保持Access Token和scope之间的关系

5. 为该访问令牌设置一个过期时间 expires_in,比如 1 天。

刷新令牌(Refresh Token)

Access Token的有效期往往很短,当过期后,需要用户重新授权,才能使用,这样带来了不好的用户体验。

所以OAuth 2.0 引入了Refresh Token。当Access Token过期时,第三方软件可以通过Refresh Token重新获取Access Token, 而不需要用户再次授权。

Refresh Token也是有有效期的,同时也是一次性的,当Refresh Token被使用后,会失效。第三方软件通过Refresh Token刷新的时候,会同时返回新的Access Token和RefreshToken。

Refresh Token时在授权服务第一次生成Access Token时,一起生成返回给第三方应用的。


此文章为3月Day4学习笔记,内容来源于极客时间《OAuth2.0 实战课》,强烈推荐该课程!/推荐该课程

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

友情链接更多精彩内容