为了账号安全,请及时绑定邮箱和手机立即绑定
首页 手记 第九节 OAuth2,以及本微服务项目相关实现定义

第九节 OAuth2,以及本微服务项目相关实现定义

2019.01.11 20:14 1056浏览

本节讲解OAuth2 相关结合spring security来实现各个服务的权限控制

  1. OAuth2

  • 简单介绍下oauth2是什么,做什么,以及后续结合spring security去实现

  • 首先是什么?
    它的定义我们可以在OAuth2的官网上可以看到

OAuth 2.0 is the industry-standard protocol for authorization. 
OAuth 2.0 supersedes the work done on the original OAuth protocol created in 2006. OAuth 2.0 focuses on client developer simplicity while providing specific authorization flows for web applications, desktop applications, mobile phones, and living room devices.

一句话概括下,OAuth 2.0是行业标准的授权协议。、

  • 然后它能做什么

  • 举个例子,当我们在第一次使用简书的时候,我们还没有注册,但是我们(懒)的注册就想要直接登陆进去怎么办呢?于是我们可以通过第三方(qq、微信、支付宝等)授权简书平台让我们登陆,如下图:

webp

借助第三方登陆


上面就是我们比较直观的感受出它其实就是为了方便用户,为懒人服务

更详细的可参考阮一峰的一篇
或者
OAuth2官网

  • 如何实现呢
    有一种具体的表现形式,就是token认证,下面两幅摘自官网上的OAuth 2.0 Framework - RFC 6749
    ,名称含义如下:

1、 Third-party application:第三方应用程序,又称"客户端"(client),也就是例子中的"简书"。
2、HTTP service:HTTP服务提供商,简称"服务提供商",也就是例子中的微信、微博等
3、 Resource Owner:资源所有者,本文中又称"用户"(user)。
4、User Agent:用户代理,本文中就是指浏览器。
5、 Authorization server:认证服务器,即服务提供商专门用来处理认证的服务器。
6、Resource server:资源服务器,即服务提供商存放用户生成的资源的服务器。它与认证服务器,可以是同一台服务器,也可以是不同的服务器。

oauth2根据使用场景不同,分成了4种模式

    授权码模式(authorization code)
    简化模式(implicit)
    密码模式(resource owner password credentials)
    客户端模式(client credentials)

可对照上面名称参考下面协议流程图以及刷新过期的访问令牌流程图:

  +--------+                               +---------------+     |        |--(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 ---|               |
     +--------+                               +---------------+

刷新过期的访问令牌流程图

 +--------+                                           +---------------+  |        |--(A)------- Authorization Grant --------->|               |
  |        |                                           |               |
  |        |<-(B)----------- Access Token -------------|               |
  |        |               & Refresh Token             |               |
  |        |                                           |               |
  |        |                            +----------+   |               |
  |        |--(C)---- Access Token ---->|          |   |               |
  |        |                            |          |   |               |
  |        |<-(D)- Protected Resource --| Resource |   | Authorization |
  | Client |                            |  Server  |   |     Server    |
  |        |--(E)---- Access Token ---->|          |   |               |
  |        |                            |          |   |               |
  |        |<-(F)- Invalid Token Error -|          |   |               |
  |        |                            +----------+   |               |
  |        |                                           |               |
  |        |--(G)----------- Refresh Token ----------->|               |
  |        |                                           |               |
  |        |<-(H)----------- Access Token -------------|               |
  +--------+           & Optional Refresh Token        +---------------+

当然具体如何实现,用什么方式实现其实是无所谓,因为只要遵循上面定义的规则就可以。已经有很多造好的轮子了,我们拿过来用就好了,如果想要更深入的研究也可以自己尝试去造轮子。这里就使用spring security。关于shiro集成有空下次再说。

  1. 为方便项目中实例定义如下

  • 不想画了就借助网上一张图来说明,下面的为OAuth2的授权码模式

webp

图片.png

  • 从第2步开始,使用twitter作为第三方登陆,

  • 第3、4步,展示twitter登录页面,输入用户名密码或者其他认证令牌例如二维码等,登陆到twitter平台

  • 第5步 twitter服务器中校验用户名密码,校验成功,会响应浏览器一个重定向地址,并附上一个code(授权码)重定向到简书平台(重定向地址4步需要带上给微信平台,否则twitter不知到将认证令牌给谁)

  • 第6、7 twitter验证通过后通过浏览器重定向到quora,附带有授权码,quora拿授权码去twitter获取token

  • 第8 步 twitter返回token 用户登入quora

  • 第9  10 11 步 浏览器请求用户资源信息,所以通过简书携带token去twitter,twitter会拿token到认证服务器做认证

  • 第12  认证通过返回需要的资源信息

*** 至于具体url定义和请求参数、响应参数定义可参考网上给出的规定 ***



作者:勃列日涅夫
链接:https://www.jianshu.com/p/fbdb73ef9aec


点击查看更多内容
0人点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
手记
粉丝
219
获赞与收藏
1050

关注TA,一起探索更多经验知识

同主题相似文章浏览排行榜

风间影月说签约讲师

51篇手记,涉及Java、MySQL、Redis、Spring等方向

进入讨论

Tony Bai 说签约讲师

151篇手记,涉及Go、C、Java、Python等方向

进入讨论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消