Spring Security OAuth2 单点登录

Spring Security OAuth2 单点登录

1. OAuth 2.0

OAuth(Open Authorization)为用户资源的授权提供了一个安全的、开放而又简易的标准。最简单的理解,我们可以看一下微信OAuth2.0授权登录流程:

 

通过OAuth2可以授权第三方应用访问资源拥有者在这个平台的资源。举个例子,用微信登录某个手机APP,此时会让弹窗让用户授权,用户同意以后,这个APP就可以获取用户的资源(比如:昵称、头像、openid等)进行登录了。在这个过程中,用户的微信账户就是资源,资源的所有者是用户,第三方应用是这个APP。

常用的授权类型(Authorization Grant)有如下种:

  • 授权码(Authorization Code): 用户授权后获取授权码,通过授权码获取access_token
  • 密码(Resource Owner Password Credentials):不用先获取授权码,而是直接拿着资源所有者的密码去获取access_token

下面重点关注授权码模式,因为接下来会利用OAuth2实现单店的登录

关于OAuth 2.0请参考下面的文档

https://datatracker.ietf.org/doc/html/rfc6749

https://oauth.net/2/

 

Client 可以理解为第三方应用,比如:微博

User-Agent 可以理解为浏览器,比如:用户的Chrome浏览器

Resource-Owner 可以理解为用户,比如:微信用户

Authorization Server 可以理解为认证中心,比如:微信开放平台

整个过程可以表述为,用户打开浏览器访问微博,选择微信登录,用户扫码后在手机端进行授权,微博拿到授权码并向微信开放平台获取令牌,之后微博变可以获取到用户的昵称和头像等资源,然后登录成功。

2. 单点登录

单点登录(Single Sign On),简称为 SSO,是比较流行的企业业务整合的解决方案之一。SSO的定义是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统。 

利用Spring Security OAuth2的话,流程大概是这样的,我自己画了一个时序图:

3. Spring Security OAuth 2

首先,明确几个角色

Authorization Server :授权服务器 

Resource Server :资源服务器,就是用户可以访问的资源,那我们接下来单点登录来讲,订单管理系统、用户管理系统、商品管理系统、客服管理系统等等这些都是资源服务器

Client :客户端,它是需要访问资源服务器的。如果是传统的那种,可以把它理解成一个Java应用,如果是前后端分离的,可以把它理解为一个浏览器

3.1. 授权服务器配置

最重要的依赖

<dependency>
    <groupId>org.springframework.security.oauth.boot</groupId>
    <artifactId>spring-security-oauth2-autoconfigure</artifactId>
    <version>2.5.5</version>
</dependency>
hmoban主题是根据ripro二开的主题,极致后台体验,无插件,集成会员系统
自学咖网 » Spring Security OAuth2 单点登录