单点登录(SSO)的设计与实现

1 概述

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

我们目前的系统存在诸多子系统,而这些子系统是分别部署在不同的服务器中,那么使用传统方式的session是无法解决的,我们需要使用相关的单点登录技术来解决。

当我们访问其中一个前台系统需要登录才可以访问的页面时,自动跳转到登录中心进行登录,登录后再次跳转回该前台系统,该前台系统可以获取登录名。

2 现状

每个应用站点都实现了本站专用的帐号数据库和登录模块。各站点的登录状态相互不认可,各站点需要逐一手工登录。

1、认证(authentication): 验证用户的身份;

2、授权(authorization): 验证用户的访问权限。

3 目标

目标1:设计并实现一个第三方授权中心服务(Server),用于完成用户登录,认证和权限处理。

目标2:可以在授权中心下挂载任意多个资源系统应用(如标注、爬虫等)。

目标3:当用户访问资源系统应用的安全页面时,会重定向到授权中心进行身份验证,认证完成后方可访问资源系统应用的服务,且多资源系统应用只需要登录一次即可。

4 实现方式:Spring Security OAuth2

4.1 描述

        OAuth2是一个开放标准,用于授权第三方应用程序访问用户资源,而无需共享用户的用户名和密码。‌ OAuth2通过颁发令牌来实现授权,提高了系统的安全性和用户隐私保护。Spring Security OAuth2扩展了Spring Security框架,在微服务架构中,Spring Security OAuth2可以帮助企业有效地控制多个服务的统一登录、授权及资源保护工作。它解决了传统登录方式中存在的问题,如用户需要在不同设备上分别登录、第三方应用需要用户提供账号密码、权限管理复杂等‌。通过使用Spring Security OAuth2,企业可以简化授权流程,提高安全性,并实现细粒度的权限控制‌。

4.2 角色类型

1、‌资源拥有者(Resource Owner)‌:资源的合法拥有者。

2、‌‌客户端(Client)‌:请求访问资源的第三方应用程序。

3、‌‌资源服务器(Resource Server)‌:存储用户资源并响应带有有效令牌的请求。

4、‌‌授权服务器(Authorization Server)‌:负责发放和管理访问令牌。

4.3 授权类型

1、‌授权码模式(Authorization Code)‌:这是最常见的授权模式。用户首先在授权服务器上认证,然后同意授权给客户端。授权服务器生成授权码,客户端使用这个授权码向授权服务器请求访问令牌。这种方式下,用户的原始凭据不会传递给客户端应用‌。

2、‌简化模式(Implicit)‌:这种模式下,客户端直接从授权服务器获取令牌,而不是先获取授权码。这种方式适用于那些不支持复杂流程的客户端,如某些JavaScript应用‌。

3、‌密码模式(Resource Owner Password Credentials)‌:在这种模式下,客户端直接使用用户的用户名和密码来获取访问令牌。这种方式适用于信任客户端且用户直接提供凭据的场景‌。

4、‌客户端凭证模式(Client Credentials)‌:这种模式适用于那些不需要用户参与的场景,例如客户端以自己的名义请求访问令牌‌。

4.4 使用场景

        不同应用系统可以根据具体需求选择合适的授权类型‌。例如,对于需要用户参与的Web应用,授权码模式可能更合适;而对于某些不需要用户直接参与的后台服务,客户端凭证模式可能更简单高效‌。

4.5 授权流程

1、‌用户打开客户端并请求授权‌。

2、‌用户同意授权请求‌。

3、‌客户端使用授权请求向认证服务器申请令牌‌。

4、‌认证服务器验证后发放令牌‌。

5、‌客户端使用令牌访问资源服务器‌。

6、‌资源服务器验证令牌后提供资源‌。

4.6 设计思路

4.6.1 认证中心平台

客户端页面

1、登录页面

2、普通用户首页

3、管理员首页

4、账号创建子页面

认证中心后台

1、关键依赖

<dependency>
 <groupId>org.springframework.cloud</groupId>
 <artifactId>spring-cloud-starter-oauth2</artifactId>
 </dependency>

 2、@EnableResourceServer:表示作为资源服务器。

认证服务器配置 AuthorizationServerConfig:用于定义资源系统以及token的实现方式。

安全配置 SpringSecurityConfig:配置请求URL的访问策略、定义了同一认证登录页面URL等。

资源系统

1、关键依赖

<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-security</artifactId>
</dependency>
<dependency>
            <groupId>org.springframework.security.oauth.boot</groupId>
            <artifactId>spring-security-oauth2-autoconfigure</artifactId>
</dependency>

2、关键注解

@EnableOAuth2Sso:标识为SSO的资源系统客户端。

3、身份信息配置

security:
 oauth2:
 client:
 client-id: sheep1
 client-secret: 123456
 user-authorization-uri: ${auth-server}/oauth/authorize
 access-token-uri: ${auth-server}/oauth/token
 resource:
 jwt:
 key-uri: ${auth-server}/oauth/token_key

用于和授权中心进行通信的身份标识。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值