Spring Security之OAuth2的使用(一)

222 阅读4分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第15天,点击查看活动详情

Spring Security之OAuth2的使用(一)

\quad如今,在各种PC端和手机端的登录界面都可以看到第三方登录的场景,而 OAuth2 就是一个很好的实现方式,在很多场景下都会用到它,Spring Security也对OAuth2协议提供了相应的支持,我们可以很方便地在

1. OAuth2简介

1.1 什么是OAuth2

\quadOAuth是一个开放标准,它允许用户让第三方应用访问该用户在其他上存储的私密资源(如头像、照片等),并且在这个过程中无须将用户名和密码提供给第三方应用。OAuth2在这里是通过令牌(token)来实现这一功能的,每个令牌授权一个特定的网站特定的时段内允许访问特定的资源,这就限制授权的范围和时间,更加的安全。

1.2 OAuth2的主要作用

\quadOAuth让用户可以授权第三方网站,允许他们灵活的访问存储在另外一些资源服务器上的特定信息,但不是所有的内容。对于用户而言,我们在互联网应用中最常见的OAuth应用就是各种第三方登录,例如QQ授权登录、微信授权登录还有GitHub授权登录等登陆方式。举个很常见的例子,用户想通过微信登录抖音,对这个场景来说,抖音就是一个第三方应用,它需要访问用户存储在微信服务器上的一些基本信息,此时,就必须得到用户的授权才可以。如果微信将用户名/密码告诉抖音了,那抖音就能通过用户名密码在微信服务器上进行认证,进而获取用户的所有信息。那么只有用户对密码进行修改,才可以完全收回这种授权,安全隐患很大,而使用OAuth协议就能很好地解决这些问题。

OAuth2是OAuth协议的下个版本,但不兼容OAuth 1.0。OAuth2关注客户端开发者的简易性,同时为Web应用、桌面应用、移动设备、IoT设备提供专门的认证流程。

2. OAuth2的授权模式

\quadOAuth2协议一共支持四种不同的授权模式:

  1. 授权码模式:常见的第三方平台登录功能基本都是使用这种模式,它是最安全同时也是最复杂的授权模式。
  2. 简化模式:简化模式是不需要第三方服务端参与,直接在浏览器中向授权服务器申请令牌(token),如果网站是纯静态页面,则可以采用这种方式。
  3. 密码模式:密码模式是用户把用户名/密码直接告诉客户端,客户端使用这些信息向授权服务器申请令牌(token)。这需要用户对客户端高度信任,例如客户端应用和服务提供商就是同一家公司,比如大部分游戏的登录的授权方式。
  4. 客户端模式:客户端模式是指客户端使用自己的名义而不是用户的名义向服务提供者申请授权。严格来说,客户端模式并不能算作OAuth协议解决问题的一种解决方案,但是,对于开发者而言,在一些为移动端提供的授权服务器上使用这种模式还是非常方便的。

\quad所以说,授权模式不同,但是授权的流程都是相似的,只是在某些步骤上有所差异罢了,授权的流程图如下:

授权流程图.png

\quad大体流程是这样的,客户端向资源所有者请求授权,资源所有者收到请求后发现客户端没有权限,就求要求客户端向资源服务器发起授权,此时客户端向授权服务器请求授权,拿到返回Access Token,再去访问受保护资源,此时授权成功,就可以获取到受保护的资源。