OAuth2.0授权码模式介绍

概述

OAuth(Open Authorization),是一种开放标准授权协议。用于让用户可以授权第三方系统,访问自己在另一个系统上拥有的资源。
本文主要讲述OAuth里的授权码模式。

场景

考虑如下场景,
比如用户先注册微信,进行实名认证。后来登录了某个微信小程序,为了使用其上的某个功能,微信小程序希望获得用户的微信账号是否实名认证的信息。

这里
微信就是资源系统:用户的资源所在的系统,拥有资源服务和OAuth2.0认证服务。
实名认证信息就是资源。
微信小程序就是三方系统:请求获得用户的资源,实现用户需要的功能。
用户:同时在资源系统和三方系统都拥有账户并需要使用功能,在资源系统拥有数据资源,在三方系统请求使用功能。

这种场景中,如果使用账号名+密码方式的授权方式,那么用户需要给三方系统他的账号名和密码。
三方系统使用用户的账号名+密码登录资源系统,查询获得资源。
注意:这里会有很多的三方系统,三方系统请求的资源各不相同。

这种方式的问题是:
1.用户的密码给了第三方系统,存在极大的个人隐私暴露风险。
2.用户不能随便改自己的密码,一旦改了,那么之前授权给的所有三方系统会失去授权,需要重新授权,非常麻烦。
3.三方系统拿到账号名和密码,登录资源系统后,拥有所有数据资源权限,除了获得当前资源,可以获得用户的任意资源。
4.用户无法管理已授权记录,即取消某一个三方系统授权,或者取消某一个资源的授权。
5.资源系统一般针对账号名+密码登录方式,都会有验证码,或者动态图进行验证,以确认是人工操作。一旦需要给三方系统进行密码授权,那么需要提供单纯的账号名和密码登录。

OAuth2.0授权码模式

针对以上问题,OAuth2.0认证方式应运而生。
授权码模式,思路是,创造出授权凭证的概念,通过授权凭证来表示用户授权三方系统访问资源系统的某个资源。
大致流程:

  1. 三方系统需要为用户在资源系统上请求授权。
  2. 用户在资源系统上允许授权。
  3. 资源系统生成用户允许三方系统访问某个资源的授权凭证,交给三方系统。
  4. 三方系统可以通过用户的授权凭证访问资源,用户可以在资源系统上查看管理自己的授权凭证。
    其中,
    三方系统要维护每个用户对应的授权凭证,授权了哪些资源。
    资源系统要维护每个用户对应的授权凭证,授权给哪个三方系统,哪些资源。

调用关系图:
在这里插入图片描述

流程:

  1. 注册
    首先资源系统需要知道向谁授权了,三方系统需要在资源系统上注册,得到clientId和clientSecret,这是三方系统在资源系统上的认证的身份认证信息。

  2. 请求三方系统某个功能
    用户打开三方系统页面,请求使用某个功能

  3. 返回资源系统的给予授权的页面链接
    三方系统返回给用户一个资源系统的给予授权的页面链接。
    这个链接中附带了以下参数:
    clientId参数,是告诉资源系统,用户给哪个三方系统授权。
    resources参数(可选),是告诉资源系统,三方系统请求授权的资源列表。
    回调url参数,作用是当用户授权成功了,资源系统需要回调跳转到三方系统的哪个链接地址,告诉三方系统授权成功以及继续处理。
    state参数,是三方系统请求授权上下文参数。资源系统跳转回三方系统的回调url链接时带回,用以让三方系统获得这边请求授权的上下文信息(三方系统的用户id等)进行继续处理(绑定存储授权信息)。

  4. 登录、授权
    用户登录资源系统的账号。操作授权,参数和给予授权的页面链接参数一致。
    资源系统生成授权码,对应用户的账号对三方系统的授权,以及授权资源列表。
    注意这里要校验回调链接是否合法,通过签名或者配置白名单。

  5. 返回三方系统授权回调链接
    资源系统返回给用户三方系统的授权回调链接。
    这个链接中附带了以下参数:
    state参数。
    authCode,授权码。用以三方系统获得授权凭证。

  6. 访问授权回调链接
    用户访问三方系统的访问授权回调链接,触发三方系统执行授权回调。
    这个链接中附带了以下参数:
    state参数。
    authCode,授权码。用以三方系统获得授权凭证。

  7. 获得授权凭证
    三方系统向资源系统请求授权凭证。附带参数:clientId,clientSecret,authCode。
    资源系统校验clientId,clientSecret,authCode通过,生成记录授权凭证,表示用户的账号对三方系统的授权,以及授权的资源列表。将授权凭证返回给三方系统。
    三方系统拿到授权凭证,根据state拿到上下文参数,包括用户账号id,将授权凭证和用户账户id映射存储。

  8. 根据授权凭证请求资源
    三方系统用授权凭证向资源系统资源服务请求资源。
    参数:授权凭证

  9. 校验授权凭证
    资源系统资源服务向认证服务校验授权凭证。
    认证服务校验通过。

10.返回资源数据
资源系统资源服务向三方系统返回资源数据。

11.返回功能处理结果
三方系统拿到资源数据,完成功能操作,向用户返回功能处理结果。

后续,
资源系统存储了用户向三方系统授权资源的授权凭证。后续用户可以查看、变更及删除等。
三方系统存储了用户的授权凭证,后续都可以根据授权凭证请求资源。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值