已发表的技术专栏(订阅即可观看所有专栏)
0 grpc-go、protobuf、multus-cni 技术专栏 总入口
4 grpc、oauth2、openssl、双向认证、单向认证等专栏文章目录
注意:
实话实说,
oauth2我并没有研究的十分透彻,还有很多地方不理解,如果有机会接触到真实的案例的话,再更新本篇文章。
本篇文章将自己的认识进行了总结,肯定有说的不对的地方,还请谅解。
如果有什么问题,可以留言,共同学习。
| 1、介绍 |
| 1.1、一般的认证与授权方案有哪些? |
目前常用的是OAuth2
| 1.2、oauth2介绍 |
OAuth(开放授权)是一个开放标准,
允许用户让第三方应用访问该用户在某网站上存储的资源(如邮箱、手机、头像等),
而无需将用户名和密码提供给第三方应用。
| 1.3、oauth2使用场景? |
其重点在于为Web应用程序、桌面应用程序、移动设备以及室内设备的授权流程提供简单的客户端开发方式。
它为第三方应用提供对HTTP服务的有限访问,
既可以是资源拥有者通过授权允许第三方应用获取HTTP服务,也可以是第三方以自己的名义获取访问权限
| 2、OAuth2.0规定了四种授权方式 |
| 2.1、授权码(authorization_code)(最常用) |

客户端一侧,获取到token, 就可以向微信一侧发起资源请求了。(这个过程,本次测试没有涉及到)
| 2.2、隐藏式(implicit) |
用户登录授权,用户直接拿token
常用于没有后端服务,只有前端的服务

| 2.3、密码方式(password) |
认证服务器端会验证用户的用户名和密码,通过后,认证服务器会创建token,将token返回给客户端
客户端携带token,就可以向资源方发起请求,获取指定用户的相关数据了。

| 2.4、客户端凭证(client_credentials) |
认证服务器端会验证客户端ID,通过后,认证服务器会创建token,将token返回给客户端
客户端携带token,就可以向资源方发起请求,获取指定用户的相关数据了。

| 2.5、换一个角度理解这4种方式 |
这4类方式,可以换一个角度理解:
如果想让认证服务器创建token的话,需要做一些身份校验工作,
不能随便调用我的接口,我就屁颠屁颠的去创建token吧。
那么,认证服务器说,我可以接收4种方式的身份校验工作
无论是授权码模式校验,密码式校验,还是客户端凭证式校验,都是想确定用户ID,获取用户ID,即确定用户身份的信息。
将用户信息封装到token里,这样资源方解析token,获取用户身份信息,才能将指定的用户信息数据反馈给客户端。
| 3、在认证和授权的过程中涉及到4种角色 |
| 4、前提要求 |
其实,
| 5、授权整体流程(此图很重要,一定要搞清楚,哪些代码是自己负责写的,哪些是人家的;自己是哪个角色要搞清楚) |
该图从官网截的
+--------+ +---------------+
| |--(A)- Authorization Request ->| Resource |
| | | Owner |
| |<-(B)-- Authorization Grant ---| |
| | +---------------+
| |
| | +---------------+
| |--(C)-- Authorization Grant -->| Authorization |
| Client | | Server |
| |<-(D)----- Access Token -------| |
| | +---------------+
| |
| | +---------------+
| |--(E)----- Access Token ------>| Resource |
| | | Server |
| |<-(F)--- Protected Resource ---| |
+--------+ +---------------+
假设现在有4种角色:用户,CSDN,授权服务,微信;它们之间的关系:

在这个图里,要实现的是认证服务,你想想CSDN,微信,肯定不是你实现的吧。
图中所描述的流程应该是授权码方式
| 6、测试用例说明 |
本次测试直接使用go-oauth2官方提供的测试用例
| 7、在go-oauth2源码中授权码字段grant_type的有效值? |
grant_type值决定了oauth2认证的方式
在oauth2/const.go文件下
grant_type的有效值如下:
其实,
还有一个值为code
表示设置的是 授权码;
认证服务器端检测到后,若为code,需要创建授权码,反馈给客户端
客户端有了授权码就可以再次向认证服务器获取token
| 8、参考 |
下一篇文章
oauth2认证方式之授权码模式介绍