Spring Security OAuth2简介

最近学习了一些Spring Security OAuth2授权认证的实现过程。打算写一篇博客记录一下,毕竟自己将要参加工作了,这些技术也是需要学习的内容。

目录

1.OAuth2是什么?

2.OAuth2中存在的概念描述

(1)交互模型

 

(2)四种客户端授权模式

1> 简化模式

2>授权码模式

3>密码模式

4>客户端模式


1.OAuth2是什么?

在开始正文内容之前,我想先解释一下,OAuth2是什么。

OAuth 协议为用户资源的授权提供了一个安全的、开放而又简易的标准。与以往的授权方式不同之处是 OAuth 的授权不会使第三方触及到用户的帐号信息(如用户名与密码),即第三方无需使用用户的用户名与密码就可以申请获得该用户资源的授权,因此 OAuth 是安全的。换言之,就像我们在第三方平台上需要QQ登录授权时,第三方平台并不会拿到我们的qq登录密码而是通过QQ提供的第三方登录系统获取到了用户的个人信息,比如头像和昵称这些。

所以本文所说的Spring Security其实就是基于OAuth2协议的一种实现方式。它提供了强大的授权和认证方式,可以让用户只是通过一些配置的方式就可以实现OAuth2协议中规定的功能。

2.OAuth2中存在的概念描述

(1)交互模型

交互模型涉及三方:

  • 资源拥有者:用户
  • 客户端:APP
  • 服务提供方:包含两个角色
    • 认证服务器
    • 资源服务器

认证服务器需要对客户端进行认证,以保证客户端的有效性,其次认证服务器需要用户进行认证,比如需要用户提供账号和密码。但是这部分内容是不经过第三方客户端而是直接调用认证服务器提供的接口,比如QQ的授权登录界面(如下图所示)。

Spring Security OAuth2简介

 

认证服务器会为客户端提供一个clientid和client_secret。这个是用来进行客户端认证的过程。在客户端通过认证服务器的认证后,会让用户跳转到用户登录的界面让用户输入用户名和密码进行授权,在授权成功后会给客户端返回一个授权码code。客户端需要根据clientid,client_secret以及这个code换取相应的access_token。

(2)四种客户端授权模式

1> 简化模式

简化模式其实是将上述获取到access_token存储在页面上,没有更新token的功能,没有持久化存储的能力,所有的token都是存储在页面上的。

Spring Security OAuth2简介

2>授权码模式

授权码模式适用于有自己的服务器的应用,它是一个一次性的临时凭证,用来换取 access_token 和 refresh_token。需要客户端提供clientid和client_secret来换取code,这个code使用一次之后就会作废。

Spring Security OAuth2简介

 

3>密码模式

这个跟上述的授权模式很相似,只是用户需要提供的自己的用户名以及密码。客户端使用这些信息,向 "服务商提供商" 索要授权。在这种模式中,用户必须把自己的密码给客户端,但是客户端不得储存密码。

Spring Security OAuth2简介

 

4>客户端模式

如果信任关系再进一步,或者调用者是一个后端的模块,没有用户界面的时候,可以使用客户端模式。鉴权服务器直接对客户端进行身份验证,验证通过后,返回 token。

Spring Security OAuth2简介

 

上述即为OAuth2的一些基本知识,下一篇博客我会展示具体的实现代码,如果之后在工作中涉及到该部分的使用我会进一步跟进。